DataGridView中被表示的TextBox的AutoComplete有效
注意:DataGridView控件是從.NET Framework 2.0版本開始追加的。
在DataGridView中被表示TextBox的AutoComplete有效的方法,如果對「取得在DataGridView中表示的TextBox」中所介紹的方法理解的話,就相當簡單。就是對取得的TextBox的AutoCompleteMode屬性進行變更即可。
下面的例子是文字型的"Column1"列中表示的TextBox增加AutoComplete的代碼。
[VB.NET]
Dim autoCompleteSource As New AutoCompleteStringCollection()
'EditingControlShowing事件處理器
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
'取得了被表示的TextBox
Dim tb As TextBox = CType(e.Control, TextBox)
'檢測對應列
If dgv.CurrentCell.OwningColumn.Name = "Column1" Then
'AutoComplete有效
tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend
tb.AutoCompleteSource = _
Windows.Forms.AutoCompleteSource.CustomSource
tb.AutoCompleteCustomSource = Me.autoCompleteSource
Else
'AutoComplete無效
tb.AutoCompleteMode = AutoCompleteMode.None
End If
End If
End Sub
'DataSourceChanged事件處理器
Private Sub DataGridView1_DataSourceChanged( _
ByVal sender As Object, ByVal e As EventArgs) _
Handles DataGridView1.DataSourceChanged
Dim dgv As DataGridView = CType(sender, DataGridView)
'AutoComplete的List初始化
Me.autoCompleteSource.Clear()
'向List追加DataGridView內的數據
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
'向AutoComplete的List追加
autoCompleteSource.Add(val)
End If
Next r
End Sub
'CellValueChanged事件處理器
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
'向AutoComplete的List追加
autoCompleteSource.Add(val)
End If
End If
End Sub
[C#]
AutoCompleteStringCollection autoCompleteSource =
new AutoCompleteStringCollection();
//EditingControlShowing事件處理器
private void DataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (e.Control is TextBox)
{
//取得了被表示的TextBox
TextBox tb = (TextBox)e.Control;
//檢測對應列
if (dgv.CurrentCell.OwningColumn.Name == "Column1")
{
// AutoComplete有效
tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
tb.AutoCompleteSource = AutoCompleteSource.CustomSource;
tb.AutoCompleteCustomSource = this.autoCompleteSource;
}
else
{
// AutoComplete無效
tb.AutoCompleteMode = AutoCompleteMode.None;
}
}
}
//DataSourceChanged事件處理器
private void DataGridView1_DataSourceChanged(object sender, EventArgs e)
{
DataGridView dgv = (DataGridView)sender;
// AutoComplete的List初始化
this.autoCompleteSource.Clear();
//向List追加DataGridView內的數據
foreach (DataGridViewRow r in dgv.Rows)
{
//取得單元格的值
string val = r.Cells["Column1"].Value as string;
if (!string.IsNullOrEmpty(val) &&
!this.autoCompleteSource.Contains(val))
{
//向AutoComplete的List追加
autoCompleteSource.Add(val);
}
}
}
//CellValueChanged事件處理器
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))
{
//向AutoComplete的List追加
autoCompleteSource.Add(val);
}
}
}