LinkLabel DataGrid列






4.38/5 (10投票s)
一个用于LinkLabel的简单数据网格列。
引言
我需要在一个DataGrid列中包含一个可点击的单元格。我在网上找不到有效的解决方案(除了某些销售控件包和一些技巧,例如在网格上进行鼠标按下和鼠标移动/命中测试),而且我看到很多人都在要求这个功能……所以我决定自己编写它。它非常简单和基础,但效果非常好。
这就是我需要的,也是我编写的内容,你可能需要根据你的需要进行调整。
你可能需要添加的一些功能(自行添加):
- 网格字体更改。
 
- 从右到左的实现。
- 已访问链接。
- 鼠标不在其上时的下划线(我需要下划线在鼠标悬停在链接文本上时出现)。
- 链接的自定义颜色化。
它看起来的样子
| 普通网格 | 光标在单元格内 | 光标在链接上 | 光标在链接上 (行已选中) | 
| 
 | 
 | 
 | 
 | 
工作原理
该控件重写了一些DataGridColumnStyle方法(正如你编写自定义ColumnStyle时需要做的那样)。当控件初始化时(在其构造函数中),一个通用的LinkLabel(这将是响应点击的主要组件)被初始化为标准大小。当TableStyle绑定到DataGrid时,控件绑定到一些事件。
- MouseMove- 用于在用户将光标移动到网格上时显示/隐藏控件。
- DataSourceChanged- 用于在- Datagrid.Datasource更改时隐藏控件(如果可见)。
- BindingContextChanged- 用于在网格绑定到数据源更改时隐藏控件(如果可见)。
- PositionChanged (DataBinding)- 用于在数据源中绑定的位置更改时隐藏控件(如果可见)。(例如:你点击链接,并且- DataGrid.Datasource加载了不同的数据)。
重写的方法
- 编辑:Abort、Commit、Edit
- 绘制:Paint(带有重载)
- 单元格大小:GetMinimumHeight、GetPreferredHeight、GetPreferredSize
- 处理:SetDataGridInColumn、ConcedeFocus
如何使用
(用于获取上述图片的示例代码)
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
注释
我希望这段代码对你有所帮助。如果你想通过修复错误和/或添加功能来贡献,请告诉我。我会相应地修改代码。






