目录
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);
}
}
}
欢迎微信技术交流: