dataGrid1.Controls.Add(comboBox1);
原本设想当光标移到表格的第二列时显示下拉复合框,以方便输入,可实际是表格的CurrentCell位于comboBox1上,于是我将comboBox1的width增大,使得comboBox1的下拉箭头从右边露了出来,可这样不美观,comboBox1的宽度挤到第三列上去了,有什么办法使得comboBox1在表格的文本单元格上面?
这个问题我也遇到过,那如果是Button的话,怎么邦定阿!
如果直接在DataGrid里邦定的话,就只是一个平面结构,很难看!
DataGridTableStyle tblStyle = new DataGridTableStyle();
tblStyle.MappingName = t.TableName
myGrid.TableStyles.Add(tblStyle);
DataGridTextBoxColumn dgtb =(DataGridTextBoxColumn)myGrid.TableStyles[0].GridColumnStyles[1];
ComboBox cmbbox = new ComboBox();
cmbbox.Items.AddRange(new object[]{"选项一","选项二","选项三"});
cmbbox.Cursor = Cursors.Arrow;
cmbbox.DropDownStyle= ComboBoxStyle.DropDownList;
cmbbox.Dock = DockStyle.Fill;
//把ComboBox添加到DataGridTableStyle的第一列
dgtb.TextBox.Controls.Add(cmbbox);
[此贴子已经被作者于2006-8-8 16:56:22编辑过]
根据程序运行的特点,我猜想是因为表格单元格获得焦点而盖住了comboBox1,于是我在CurrentCellChanged事件中加了两行代码,结果OK了,与大家分享一下。
private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
{
if (dataGrid1.CurrentCell.ColumnNumber == 1)
{
Rectangle rect = dataGrid1.GetCellBounds(dataGrid1.CurrentCell);
comboBox1.SetBounds(rect.Left,rect.Top,rect.Width,rect.Height);
button1.Focus(); //焦点撤离表格,下行代码使comboBox1显示出来。
comboBox1.Visible = true;
dataGrid1.Focus(); //焦点又回到表格,但焦点去来之后,当前单元格没有变化,只是没了输入光标,因此comboBox1就显示出来了。先前我单击第二列的某个单元格,由于鼠标单击使当前单元格获得了输入光标,因此comboBox1不能正常显示了。
string str = dataGrid1[dataGrid1.CurrentCell.RowNumber,
dataGrid1.CurrentCell.ColumnNumber].ToString()
for (int i = 0; i < comboBox1.Items.Count; i ++)
{
if (comboBox1.Items[i].ToString() == str)
{
comboBox1.SelectedIndex = i;
break;
}
}
}
else
{
comboBox1.Visible = false;
}
}