我正在使用一个C#winForm,它使用一个具有多个DataGridViewCell类型的Column的dataGridView。例如
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 dropDownList中。我在这里做错了什么?
提前致谢, -DA
答案 0 :(得分:0)
ComboBox中的项目是默认的字符串。在WPF中,您只需将控件添加到ComboBox即可。在Winforms中,您可能需要自定义组合框。
答案 1 :(得分:0)
尝试在DataGridView中呈现不同的控件类型很难。 DataGridView旨在显示数据而不是控制它。
来自MSDN: DataGridView:在可自定义的网格中显示数据。
如果您的C#版本有
,建议您使用DataRepeater控件答案 2 :(得分:0)
我要说的是MSFT需要回到绘图板并修改dataGridView。不要误解我它有很多好的功能,但它的方法很复杂,缺乏你期望API支持的常用功能!似乎每次我使用dataGridView我都必须通过箍来完成最简单的任务,但无论如何,这是我的黑客工作来渲染文本框...请记住,这是一个很远的黑客这样做的正确方法,哦......希望这有助于某人。
public class DropDownCellWithTextBox : DataGridViewComboBoxCell { ContextMenuStrip dropDownList; ToolStripTextBox txtBox; DataGridView dgv; public DropDownCellWithTextBox(DataGridView _dgv) { dgv = _dgv; dropDownList = new ContextMenuStrip(); txtBox = new ToolStripTextBox(); txtBox.BorderStyle = BorderStyle.FixedSingle; txtBox.KeyDown += txtBox_KeyDown; dropDownList.Items.Add(txtBox); } public override void InitializeEditingControl(int rowIndex, object initialFormattedVaulue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex,initialFormattedValue,dataGridViewCellStyle); ContextMenuStrip cms = DataGridView.EditingControl as ContextMenuStrip; } protected override void OnMouseClick(DataGridViewCellMouseEventArgs e) { //base.OnMouseClick(e) dropDownList.Size = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Size; dropDownList.Show(dgv.PointToScreen(new Point(e.X, e.Y)); } private void txtBx_KeyDown(object sender, KeyEventArgs e) { ToolStripTextBox txt = (ToolStripTextBox)sender; if (txt.Text == "") return; if (e.KeyCode == Keys.Enter) { ToolStripMenuItem tsmi = new ToolStripMenuItem(txt.Text); tsmi.Name = txt.Text; if (!dropDownList.Items.ContainsKey(tsmi.Name)) { dropDownList.Items.Add(tsmi); txt.Text = ""; } } } }