C# 如何在datgridview中检查特定coulmn中的单元格
我有以下方法以窗口形式在datagridview中显示组合框 我如何在其中传递参数,当它们控制特定列的任何单元格时,以及在datagridview的哪个事件下C# 如何在datgridview中检查特定coulmn中的单元格,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我有以下方法以窗口形式在datagridview中显示组合框 我如何在其中传递参数,当它们控制特定列的任何单元格时,以及在datagridview的哪个事件下 private void Show_Combobox(int iRowIndex, int iColumnIndex) { // DESCRIPTION: SHOW THE COMBO BOX IN THE SELECTED CELL OF THE GRID. // PARAMETERS: iRowIndex - THE
private void Show_Combobox(int iRowIndex, int iColumnIndex)
{
// DESCRIPTION: SHOW THE COMBO BOX IN THE SELECTED CELL OF THE GRID.
// PARAMETERS: iRowIndex - THE ROW ID OF THE GRID.
// iColumnIndex - THE COLUMN ID OF THE GRID.
int x = 0;
int y = 0;
int Width = 0;
int height = 0;
// GET THE ACTIVE CELL'S DIMENTIONS TO BIND THE COMBOBOX WITH IT.
Rectangle rect = default(Rectangle);
rect = dataGridView1.GetCellDisplayRectangle(iColumnIndex, iRowIndex, false);
x = rect.X + dataGridView1.Left;
y = rect.Y + dataGridView1.Top;
Width = rect.Width;
height = rect.Height;
comboBox1.SetBounds(x, y, Width, height);
comboBox1.Visible = true;
comboBox1.Focus();
}
提前感谢….事实上,您可以使用DataGridViewComboxCell来实现您的目的
以下是一个关于如何:
为了做到这一点,您可以在combobox事件中将控件强制转换为最适合您的combobox。
我选择了EditingControlShowing,因为它是在显示控件后引发的,即已单击组合框,因此它将显示其下拉方法:
private void gridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
{
((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
}
}
这样,如果组合框的项目中不存在预设值,您将允许用户输入自己的值。为此,您可以使用CellValidating事件采取以下方法:
在本例中,这会将输入添加到ComboBox单元格的项目中。我有两个问题要问您:A为什么不使用DataGridViewComboBoxCell而不是您正在做的事情?B你到底想对组合框或单元格做什么?请您澄清一下好吗?@niklas,DataGridViewComboxCell不允许用户输入文本并接受combobox列表中没有的值。如果我能用DataGridViewCoboxCell解决这些问题,请告诉我。。。。谢谢你。检查我的答案。谢谢,但是如何将DataGridViewComboBoxColumn默认结构更改为简单的文本框样式,例如,使combobox仅在单元格处于活动状态时显示,并将新输入的值保存在datagridview的单元格中,而不是保存在combobox单元格的列表中……但是示例非常清楚,您只需控制流:s
if (gridView1.CurrentCell.IsInEditMode)
{
if (gridView1.CurrentCell.GetType() == typeof(DataGridViewComboBoxCell))
{
if (!((DataGridViewComboBoxColumn)gridView1.Columns[e.ColumnIndex]).Items.Contains(e.FormattedValue))
{
((DataGridViewComboBoxColumn)gridView1.Columns[e.ColumnIndex]).Items.Add(e.FormattedValue);
}
}
}