[英]How do I make my own DataGridView Column
我想做的就是
我讀了這本書,並做了自己的DataGridViewBarColumn,但是我絲毫不知道如何實現這樣的東西。
即使DataGridView中最多可以有10萬行,性能也不重要,我將在以后進行優化。
我認為它們的處理方式相同,所以我要問一個問題
我能給您的是實現它的起點:
首先,准備綁定並創建DataGridViewComboBoxColumn。
private List<string> list = new List<string>();
public Form1()
{
InitializeComponent();
// Data source for you dropdown list
list.Add("First Option");
list.Add("Second Option");
list.Add("Third Option");
dataGridView1.AutoGenerateColumns = false;
dataGridView1.MultiSelect = false;
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating);
dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
dataGridView1.DataError += dataGridView1_DataError;
// Formatting your ComboBox
DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();
comboColumn.FlatStyle = FlatStyle.Flat;
comboColumn.HeaderText = "Hybrid Data Grid Column";
comboColumn.DataPropertyName = "Tag";
//comboColumn.DataSource = list;
dataGridView1.Columns.Add(comboColumn);
dataGridView1.DataSource = list;
}
其次,鍵入后附加一個事件以進行編輯:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
var combo = ((DataGridView)sender).CurrentCell as DataGridViewComboBoxCell;
if (combo == null)
{
return;
}
if (!combo.Items.Contains(e.FormattedValue))
{
// Add the text you type into you bound list and refresh binding
list.Add(e.FormattedValue.ToString());
DataGridViewComboBoxColumn col = ((DataGridView)sender).CurrentCell.OwningColumn as DataGridViewComboBoxColumn;
col.Items.Clear();
col.Items.AddRange(list);
}
// Display what you type
((DataGridView)sender).CurrentCell.Value = e.FormattedValue;
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox comboControl = e.Control as ComboBox;
if (comboControl != null)
{
if (comboControl.DropDownStyle != ComboBoxStyle.DropDown)
{
comboControl.DropDownStyle = ComboBoxStyle.DropDown;
}
//Update Items if list has changed (assumes items can't be deleted)
if (comboControl.Items.Count != list.Count)
{
DataGridViewComboBoxColumn col = ((DataGridView)sender).CurrentCell.OwningColumn as DataGridViewComboBoxColumn;
col.Items.Clear();
col.Items.AddRange(list.ToArray());
//Note: current cell's items don't appear to be refreshed by the lines above
comboControl.Items.Clear();
comboControl.Items.AddRange(list.ToArray());
}
}
}
樣本輸出:
注意:由於我們在綁定列表中添加了文本輸入,因此可能會發生以下情況:單擊下拉菜單選項后,您將看到其他輸入。 因此,我將它留給您進行完善。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.