在 winform 中 DataGrid 中实现点击任一单元格都选中当前行

来源:互联网 发布:陈鸿一鸣 知乎 编辑:程序博客网 时间:2024/05/01 19:01

在 winform 中 DataGrid 中实现点击任一单元格都选中当前行

先需要重写一个方法:C#:

    internal class DataGridNoActiveCellColumn : System.Windows.Forms.DataGridTextBoxColumn    {        //重载DataGridTextBoxColumn类的Edit方法,以便使点击DataGrid中任一单元格都选中当前行        protected override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)        {            int SelectedRow = rowNum;            this.DataGridTableStyle.DataGrid.Select(SelectedRow);        }    }
vb.net :
Friend Class DataGridNoActiveCellColumn    Inherits System.Windows.Forms.DataGridTextBoxColumn    '重载DataGridTextBoxColumn类的Edit方法,以便使点击DataGrid中任一单元格都选中当前行    Protected Overloads Overrides Sub Edit(ByVal [source] As CurrencyManager, ByVal rowNum As IntegerByVal bounds As Rectangle, ByVal [readOnlyAs BooleanByVal instantText As StringByVal cellIsVisible As Boolean)        Dim SelectedRow As Integer = rowNum        Me.DataGridTableStyle.DataGrid.Select(SelectedRow)    End SubEnd Class
设置datagrid样式:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim tab As New DataTable("mytab")        For i As Int32 = 0 To 1            tab.Columns.Add(New DataColumn("A" & i, Type.GetType("System.Decimal")))        Next        tab.Columns(1).Expression = "Avg(a0)"        Dim r As DataRow        For i As Int32 = 0 To 10            r = tab.NewRow            r("A0"= 5 + i            tab.Rows.Add(r)        Next        Me.DataGrid1.DataSource = tab        Dim tabStyle As New DataGridTableStyle        Dim rCell As New DataGridNoActiveCellColumn        rCell.MappingName = tab.Columns(0).ColumnName        rCell.HeaderText = tab.Columns(0).ColumnName        tabStyle.GridColumnStyles.Add(rCell)        rCell.MappingName = tab.Columns(1).ColumnName        rCell.HeaderText = tab.Columns(1).ColumnName        rCell.Width = 100        tabStyle.GridColumnStyles.Add(rCell)        tabStyle.MappingName = tab.TableName        Me.DataGrid1.TableStyles.Add(tabStyle)    End Sub