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