C# 如何在datgridview中检查特定coulmn中的单元格

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

我有以下方法以窗口形式在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 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);
        }
    }
}