65.9K
CodeProject 正在变化。 阅读更多。
Home

LinkLabel DataGrid列

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.38/5 (10投票s)

2005年10月21日

CDDL

2分钟阅读

viewsIcon

102467

downloadIcon

640

一个用于LinkLabel的简单数据网格列。

引言

我需要在一个DataGrid列中包含一个可点击的单元格。我在网上找不到有效的解决方案(除了某些销售控件包和一些技巧,例如在网格上进行鼠标按下和鼠标移动/命中测试),而且我看到很多人都在要求这个功能……所以我决定自己编写它。它非常简单和基础,但效果非常好

这就是我需要的,也是我编写的内容,你可能需要根据你的需要进行调整。

你可能需要添加的一些功能(自行添加):

  • 网格字体更改。
  • 从右到左的实现。
  • 已访问链接。
  • 鼠标不在其上时的下划线(我需要下划线在鼠标悬停在链接文本上时出现)。
  • 链接的自定义颜色化。

它看起来的样子

普通网格 光标在单元格内 光标在链接上 光标在链接上
(行已选中)

工作原理

该控件重写了一些DataGridColumnStyle方法(正如你编写自定义ColumnStyle时需要做的那样)。当控件初始化时(在其构造函数中),一个通用的LinkLabel(这将是响应点击的主要组件)被初始化为标准大小。当TableStyle绑定到DataGrid时,控件绑定到一些事件。

  • MouseMove - 用于在用户将光标移动到网格上时显示/隐藏控件。
  • DataSourceChanged - 用于在Datagrid.Datasource更改时隐藏控件(如果可见)。
  • BindingContextChanged - 用于在网格绑定到数据源更改时隐藏控件(如果可见)。
  • PositionChanged (DataBinding) - 用于在数据源中绑定的位置更改时隐藏控件(如果可见)。(例如:你点击链接,并且DataGrid.Datasource加载了不同的数据)。

重写的方法

  • 编辑:AbortCommitEdit
  • 绘制:Paint(带有重载)
  • 单元格大小:GetMinimumHeightGetPreferredHeightGetPreferredSize
  • 处理:SetDataGridInColumnConcedeFocus

如何使用

(用于获取上述图片的示例代码)

Private Sub SetGridStyle()
    Dim grdStyle As New DataGridTableStyle

    'Other columns...

    Dim grdStileColEqv As New DataGridColumns.LinkLabel
    grdStileColEqv.MappingName = "Equivalenti"
    grdStileColEqv.HeaderText = "Eqv."
    grdStileColEqv.Alignment = HorizontalAlignment.Center
    grdStileColEqv.NullText = ""
    grdStileColEqv.Width = 40
    AddHandler grdStileColEqv.LinkClicked, AddressOf LinkClicked
    grdStyle.GridColumnStyles.Add(grdStileColEqv)

    grdLista.TableStyles.Add(grdListaStyle)
End Sub

Private Sub LinkClicked(ByVal sender As Object, _
            ByVal e As LinkLabelLinkClickedEventArgs)
    'Click handler code goes here.
    'if you need to access data of the row clicked
    '(for example to open a browser with the clicked url)
    'DirectCast(e.Link.LinkData, DataRowView)
    'contains the whole clicked row.
End Sub

注释

我希望这段代码对你有所帮助。如果你想通过修复错误和/或添加功能来贡献,请告诉我。我会相应地修改代码。

© . All rights reserved.