DataGridView用法合集(10):编辑

目录​​​​​​​

51. DataGridView编辑中单元格控件取得

52. DataGridView输入自动完成

53. DataGridView单元格编辑时键盘KEY事件取得

54. DataGridView下拉框(ComboBox)单元格编辑时事件取得

55. DataGridView下拉框(ComboBox)单元格允许文字输入设定

51. DataGridView编辑中单元格控件取得

[VB.NET]

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
        Dim dgv As DataGridView = CType(sender, DataGridView)
        Dim tb As DataGridViewTextBoxEditingControl = _
            CType(e.Control, DataGridViewTextBoxEditingControl)
        If dgv.CurrentCell.OwningColumn.Name = "Column1" Then
            tb.ImeMode = Windows.Forms.ImeMode.Disable
        Else
            tb.ImeMode = dgv.ImeMode
        End If
    End If
End Sub

[C#]

private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewTextBoxEditingControl)
    {
        DataGridView dgv = (DataGridView)sender;
        DataGridViewTextBoxEditingControl tb =
            (DataGridViewTextBoxEditingControl)e.Control;
        if (dgv.CurrentCell.OwningColumn.Name == "Column1")
            tb.ImeMode = ImeMode.Disable;
        else
            tb.ImeMode = dgv.ImeMode;
    }
}

其他控件以此类推,比如DataGridViewCheckBoxColumn或者DataGridViewButtonColumn等等。

52. DataGridView输入自动完成

[VB.NET]

Dim autoCompleteSource As New AutoCompleteStringCollection()
Private Sub DataGridView1_EditingControlShowing( _
        ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    Dim dgv As DataGridView = CType(sender, DataGridView)
    If TypeOf e.Control Is TextBox Then
        Dim tb As TextBox = CType(e.Control, TextBox)
        If dgv.CurrentCell.OwningColumn.Name = "Column1" Then
            tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend
            tb.AutoCompleteSource = _
                Windows.Forms.AutoCompleteSource.CustomSource
            tb.AutoCompleteCustomSource = Me.autoCompleteSource
        Else
            tb.AutoCompleteMode = AutoCompleteMode.None
        End If
    End If
End Sub
Private Sub DataGridView1_DataSourceChanged( _
        ByVal sender As Object, ByVal e As EventArgs) _
        Handles DataGridView1.DataSourceChanged
    Dim dgv As DataGridView = CType(sender, DataGridView)
    Me.autoCompleteSource.Clear()
    Dim r As DataGridViewRow
    For Each r In dgv.Rows
        Dim val As String = r.Cells("Column1").Value
        If Not String.IsNullOrEmpty(val) AndAlso _
                Not Me.autoCompleteSource.Contains(val) Then
            autoCompleteSource.Add(val)
        End If
    Next r
End Sub
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles DataGridView1.CellValueChanged
    Dim dgv As DataGridView = CType(sender, DataGridView)
    If dgv.Columns(e.ColumnIndex).Name = "Column1" Then
        Dim val As String = dgv(e.ColumnIndex, e.RowIndex).Value
        If Not String.IsNullOrEmpty(val) AndAlso _
                Not Me.autoCompleteSource.Contains(val) Then
            autoCompleteSource.Add(val)
        End If
    End If
End Sub

[C#]

AutoCompleteStringCollection autoCompleteSource =
    new AutoCompleteStringCollection();
private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    if (e.Control is TextBox)
    {
        TextBox tb = (TextBox)e.Control;
        if (dgv.CurrentCell.OwningColumn.Name == "Column1")
        {
            tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            tb.AutoCompleteSource = AutoCompleteSource.CustomSource;
            tb.AutoCompleteCustomSource = this.autoCompleteSource;
        }
        else
        {
            tb.AutoCompleteMode = AutoCompleteMode.None;
        }
    }
}
private void DataGridView1_DataSourceChanged(object sender, EventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    this.autoCompleteSource.Clear();
    foreach (DataGridViewRow r in dgv.Rows)
    {
        string val = r.Cells["Column1"].Value as string;
        if (!string.IsNullOrEmpty(val) &&
            !this.autoCompleteSource.Contains(val))
        {
            autoCompleteSource.Add(val);
        }
    }
}
private void DataGridView1_CellValueChanged(object sender,
    DataGridViewCellEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    if (dgv.Columns[e.ColumnIndex].Name == "Column1")
    {
        string val = dgv[e.ColumnIndex, e.RowIndex].Value as string;
        if (!string.IsNullOrEmpty(val) &&
            !this.autoCompleteSource.Contains(val))
        {
            autoCompleteSource.Add(val);
        }
    }
}

53. DataGridView单元格编辑时键盘KEY事件取得

[VB.NET]

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
        Dim dgv As DataGridView = CType(sender, DataGridView)
        Dim tb As DataGridViewTextBoxEditingControl = _
            CType(e.Control, DataGridViewTextBoxEditingControl)
        RemoveHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
        If dgv.CurrentCell.OwningColumn.Name = "Column1" Then
AddHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
        End If
    End If
End Sub
Private Sub dataGridViewTextBox_KeyPress(ByVal sender As Object, _
        ByVal e As KeyPressEventArgs) _
        Handles DataGridView1.KeyPress
    If e.KeyChar < "0"c Or e.KeyChar > "9"c Then
        e.Handled = True
    End If
End Sub​​​​​​​

[C#]

private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewTextBoxEditingControl)
    {
        DataGridView dgv = (DataGridView)sender;
        DataGridViewTextBoxEditingControl tb =
            (DataGridViewTextBoxEditingControl)e.Control;
        tb.KeyPress -=
            new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
        if (dgv.CurrentCell.OwningColumn.Name == "Column1")
        {
            tb.KeyPress +=
                new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
        }
    }
}
private void dataGridViewTextBox_KeyPress(object sender,
    KeyPressEventArgs e)
{
    if (e.KeyChar < '0' || e.KeyChar > '9')
    {
        e.Handled = true;
    }
}

54. DataGridView下拉框(ComboBox)单元格编辑时事件取得

[VB.NET]

Private dataGridViewComboBox As DataGridViewComboBoxEditingControl = Nothing
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
        Dim dgv As DataGridView = CType(sender, DataGridView)
        If dgv.CurrentCell.OwningColumn.Name = "ComboBox" Then
            Me.dataGridViewComboBox = _
                CType(e.Control, DataGridViewComboBoxEditingControl)
            AddHandler Me.dataGridViewComboBox.SelectedIndexChanged, _
                AddressOf dataGridViewComboBox_SelectedIndexChanged
        End If
    End If
End Sub
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles DataGridView1.CellEndEdit
    If Not (Me.dataGridViewComboBox Is Nothing) Then
        RemoveHandler Me.dataGridViewComboBox.SelectedIndexChanged, _
            AddressOf dataGridViewComboBox_SelectedIndexChanged
        Me.dataGridViewComboBox = Nothing
    End If
End Sub
Private Sub dataGridViewComboBox_SelectedIndexChanged(ByVal sender As Object, _
        ByVal e As EventArgs)
    Dim cb As DataGridViewComboBoxEditingControl = _
        CType(sender, DataGridViewComboBoxEditingControl)
    Console.WriteLine(cb.SelectedItem)
End Sub

[C#]

private DataGridViewComboBoxEditingControl dataGridViewComboBox = null;
private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewComboBoxEditingControl)
    {
        DataGridView dgv = (DataGridView)sender;
        if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")
        {
            this.dataGridViewComboBox =
                (DataGridViewComboBoxEditingControl)e.Control;
            this.dataGridViewComboBox.SelectedIndexChanged +=
                new EventHandler(dataGridViewComboBox_SelectedIndexChanged);
        }
    }
}
private void DataGridView1_CellEndEdit(object sender,
    DataGridViewCellEventArgs e)
{
    if (this.dataGridViewComboBox != null)
    {
        this.dataGridViewComboBox.SelectedIndexChanged -=
            new EventHandler(dataGridViewComboBox_SelectedIndexChanged);
        this.dataGridViewComboBox = null;
    }
}
private void dataGridViewComboBox_SelectedIndexChanged(object sender,
    EventArgs e)
{
    DataGridViewComboBoxEditingControl cb =
        (DataGridViewComboBoxEditingControl)sender;
    Console.WriteLine(cb.SelectedItem);
}

55. DataGridView下拉框(ComboBox)单元格允许文字输入设定

[VB.NET]

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs) _
        Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
        Dim dgv As DataGridView = CType(sender, DataGridView)
        If dgv.CurrentCell.OwningColumn.Name = "ComboBox" Then
            Dim cb As DataGridViewComboBoxEditingControl = _
                CType(e.Control, DataGridViewComboBoxEditingControl)
            cb.DropDownStyle = ComboBoxStyle.DropDown
        End If
    End If
End Sub
Private Sub DataGridView1_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles DataGridView1.CellValidating
    Dim dgv As DataGridView = CType(sender, DataGridView)
    If dgv.Columns(e.ColumnIndex).Name = "ComboBox" AndAlso _
        TypeOf dgv.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn Then
        Dim cbc As DataGridViewComboBoxColumn = _
            CType(dgv.Columns(e.ColumnIndex), DataGridViewComboBoxColumn)
        If Not cbc.Items.Contains(e.FormattedValue) Then
            cbc.Items.Add(e.FormattedValue)
        End If
    End If
End Sub

[C#]

private void DataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewComboBoxEditingControl)
    {
        DataGridView dgv = (DataGridView)sender;
        if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")
        {
            DataGridViewComboBoxEditingControl cb =
                (DataGridViewComboBoxEditingControl)e.Control;
            cb.DropDownStyle = ComboBoxStyle.DropDown;
        }
    }
}
private void DataGridView1_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    if (dgv.Columns[e.ColumnIndex].Name == "ComboBox" &&
        dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
    {
        DataGridViewComboBoxColumn cbc =
            (DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex];
        if (!cbc.Items.Contains(e.FormattedValue))
        {
            cbc.Items.Add(e.FormattedValue);
        }
    }
}

 欢迎微信技术交流:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwLink1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值