加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

DataGridView控件用法合集(十)

发布时间:2020-12-16 22:45:16 所属栏目:大数据 来源:网络整理
导读:近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第十部分。 DataGridView编辑 51. DataGridView编辑中单元格控件取得 52. DataGridView输入自动完成 53. DataGridView单元格编辑时键盘KEY事件取得 54. DataGridView下拉
近期将DataGridView常用的一些用法做了一个整理。为防止页面过长,现分批贴出来,此为第十部分。

DataGridView编辑

51. DataGridView编辑中单元格控件取得
52. DataGridView输入自动完成
53. DataGridView单元格编辑时键盘KEY事件取得
54. DataGridView下拉框(ComboBox)单元格编辑时事件取得
55. DataGridView下拉框(ComboBox)单元格允许文字输入设定

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

[VB.NET]

'EditingControlShowingイベントハンドラ

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object,_

ByVal e As DataGridViewEditingControlShowingEventArgs) _

Handles DataGridView1.EditingControlShowing

'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる

If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then

Dim dgv As DataGridView = CType(sender,DataGridView)

'編集のために表示されているコントロールを取得

Dim tb As DataGridViewTextBoxEditingControl = _

CType(e.Control,DataGridViewTextBoxEditingControl)

'次のようにしてもよい

'Dim tb As TextBox = CType(e.Control,TextBox)

'列によってIMEのモードを変更する

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#]

//EditingControlShowingイベントハンドラ

private void DataGridView1_EditingControlShowing(object sender,

DataGridViewEditingControlShowingEventArgs e)

{

//表示されているコントロールがDataGridViewTextBoxEditingControlか調べる

if (e.Control is DataGridViewTextBoxEditingControl)

{

DataGridView dgv = (DataGridView)sender;

//編集のために表示されているコントロールを取得

DataGridViewTextBoxEditingControl tb =

(DataGridViewTextBoxEditingControl)e.Control;

//次のようにしてもよい

//TextBox tb = (TextBox)e.Control;

//列によってIMEのモードを変更する

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()

'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

'編集のために表示されているテキストボックスを取得

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

'DataSourceChangedイベントハンドラ

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()

'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

'オートコンプリートのリストに追加

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

'オートコンプリートのリストに追加

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 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;

}

}

}

//DataSourceChangedイベントハンドラ

private void DataGridView1_DataSourceChanged(object sender,EventArgs e)

{

DataGridView dgv = (DataGridView)sender;

//オートコンプリートのリストを初期化

this.autoCompleteSource.Clear();

//DataGridView内のデータをリストに追加

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);

}

}

}

//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))

{

//オートコンプリートのリストに追加

autoCompleteSource.Add(val);

}

}

}

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

[VB.NET]

'EditingControlShowingイベントハンドラ

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object,DataGridViewTextBoxEditingControl)

'イベントハンドラを削除

RemoveHandler tb.KeyPress,AddressOf dataGridViewTextBox_KeyPress

'該当する列か調べる

If dgv.CurrentCell.OwningColumn.Name = "Column1" Then

'KeyPressイベントハンドラを追加

AddHandler tb.KeyPress,AddressOf dataGridViewTextBox_KeyPress

End If

End If

End Sub

'DataGridViewに表示されているテキストボックスのKeyPressイベントハンドラ

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#]

//EditingControlShowingイベントハンドラ

private void DataGridView1_EditingControlShowing(object sender,

DataGridViewEditingControlShowingEventArgs e)

{

//表示されているコントロールがDataGridViewTextBoxEditingControlか調べる

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")

{

//KeyPressイベントハンドラを追加

tb.KeyPress +=

new KeyPressEventHandler(dataGridViewTextBox_KeyPress);

}

}

}

//DataGridViewに表示されているテキストボックスの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

'EditingControlShowingイベントハンドラ

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object,_

ByVal e As DataGridViewEditingControlShowingEventArgs) _

Handles DataGridView1.EditingControlShowing

'表示されているコントロールがDataGridViewComboBoxEditingControlか調べる

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)

'SelectedIndexChangedイベントハンドラを追加

AddHandler Me.dataGridViewComboBox.SelectedIndexChanged,_

AddressOf dataGridViewComboBox_SelectedIndexChanged

End If

End If

End Sub

'CellEndEditイベントハンドラ

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object,_

ByVal e As DataGridViewCellEventArgs) _

Handles DataGridView1.CellEndEdit

'SelectedIndexChangedイベントハンドラを削除

If Not (Me.dataGridViewComboBox Is Nothing) Then

RemoveHandler Me.dataGridViewComboBox.SelectedIndexChanged,_

AddressOf dataGridViewComboBox_SelectedIndexChanged

Me.dataGridViewComboBox = Nothing

End If

End Sub

'DataGridViewに表示されているコンボボックスの

'SelectedIndexChangedイベントハンドラ

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;

//EditingControlShowingイベントハンドラ

private void DataGridView1_EditingControlShowing(object sender,

DataGridViewEditingControlShowingEventArgs e)

{

//表示されているコントロールがDataGridViewComboBoxEditingControlか調べる

if (e.Control is DataGridViewComboBoxEditingControl)

{

DataGridView dgv = (DataGridView)sender;

//該当する列か調べる

if (dgv.CurrentCell.OwningColumn.Name == "ComboBox")

{

//編集のために表示されているコントロールを取得

this.dataGridViewComboBox =

(DataGridViewComboBoxEditingControl)e.Control;

//SelectedIndexChangedイベントハンドラを追加

this.dataGridViewComboBox.SelectedIndexChanged +=

new EventHandler(dataGridViewComboBox_SelectedIndexChanged);

}

}

}

//CellEndEditイベントハンドラ

private void DataGridView1_CellEndEdit(object sender,

DataGridViewCellEventArgs e)

{

//SelectedIndexChangedイベントハンドラを削除

if (this.dataGridViewComboBox != null)

{

this.dataGridViewComboBox.SelectedIndexChanged -=

new EventHandler(dataGridViewComboBox_SelectedIndexChanged);

this.dataGridViewComboBox = null;

}

}

//DataGridViewに表示されているコンボボックスの

//SelectedIndexChangedイベントハンドラ

private void dataGridViewComboBox_SelectedIndexChanged(object sender,

EventArgs e)

{

//選択されたアイテムを表示

DataGridViewComboBoxEditingControl cb =

(DataGridViewComboBoxEditingControl)sender;

Console.WriteLine(cb.SelectedItem);

}

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

[VB.NET]

'EditingControlShowingイベントハンドラ

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

'CellValidatingイベントハンドラ

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#]

//EditingControlShowingイベントハンドラ

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;

}

}

}

//CellValidatingイベントハンドラ

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);

}

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读