如何在dataGridViewComboBoxCell中呈现多个控件类型

本文关键字:控件 类型 dataGridViewComboBoxCell | 更新日期: 2023-09-27 18:10:19

我正在研究一个c# winForm,它使用一个dataGridView,它有一个具有多个DataGridViewCell类型的列。例如

DataGridView dvg = new DataGridView();
dgv.Columns.Add("colCtrl", "Ctrl");
DataGridViewComboBoxCell cboCell = new DataGridViewComboBoxCell();
TextBox txtBox = new TextBox();
txtBox.Name = "MyTextBox";
txtBox.KeyDown += txtBox_KeyDown;
cboCell.Items.Add(txtBox);
DataGridViewRow row = new DataGridViewRow();
row.Cells.Add(cboCell);
dgv.Rows.Add(row);
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
   DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)     ((TextBox)sender).Parent;
   TextBox txtBox = (TextBox)sender;
   if (e.KeyCode == Keys.Enter)
   {
       if (!cb.Items.Contains(txtBox.Text))
           cb.Items.Add(txtBox.Text);
   }
}

textBox控件没有呈现给comboBox Items集合。它似乎是添加当我通过代码的步骤,但它没有显示出来。我基本上想使用textBox来添加字符串项目到我的comboBox下拉列表。我哪里做错了?

提前感谢,- da

如何在dataGridViewComboBoxCell中呈现多个控件类型

ComboBox中的项默认为字符串。在WPF中,您可以直接将控件添加到组合框中。在Winforms中,您可能需要自定义您的comboBox

尝试在DataGridView中呈现不同的控件类型是困难的。DataGridView的目的是显示数据,而不是控制它。

从MSDN

:DataGridView: 数据在一个可定制的网格。

我建议你使用DataRepeater控件,如果你的c#版本有它

我要说的是微软需要回到绘图板并修改dataGridView。不要误解我的意思,它有很多很好的功能,但是它太复杂了,缺乏你期望API支持的常见功能!似乎每次我用dataGridView工作时,我都要跳过各种障碍来完成最简单的任务,但无论如何,这里是我的hack工作来渲染一个文本框…记住,这是一个HACK,远不是正确的方法,哦,好吧……希望这能帮助到一些人。

<>之前公共类DropDownCellWithTextBox: DataGridViewComboBoxCell{ContextMenuStrip dropDownList;ToolStripTextBox txtBox;DataGridView dgv;公共DropDownCellWithTextBox(datagridview_dgv){DGV = _dgv;dropDownList = new contexmenustrip ();textbox = new ToolStripTextBox();txtBox。BorderStyle = BorderStyle. fixedsingle;txtBox。KeyDown += txtBox_KeyDown;dropDownList.Items.Add (txtBox);}InitializeEditingControl(int rowIndex)对象initialFormattedVaulue, DataGridViewCellStyle, DataGridViewCellStyle){base.InitializeEditingControl (rowIndex initialFormattedValue dataGridViewCellStyle);ContextMenuStrip cms = DataGridView。EditingControl作为ContextMenuStrip;}OnMouseClick(DataGridViewCellMouseEventArgs e){//base.OnMouseClick (e)它。Size = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Size;dropDownList.Show (dgv。PointToScreen(新点(e。X, e.Y));}private void txtBx_KeyDown(对象发送者,KeyEventArgs e){ToolStripTextBox txt = (ToolStripTextBox)sender;如果(txt)。Text == ")返回;if (e.KeyCode == Keys.Enter){tsmi = new ToolStripMenuItem(text . text);tsmi。Name = txt.Text;如果(! dropDownList.Items.ContainsKey (tsmi.Name)){dropDownList.Items.Add (tsmi);文本文件Text = ";}}}}