如何获取datagridview/datagridviewcell的编辑控件?

naw*_*fal 0 .net datagridview winforms datagridviewtextboxcell

我有一个datagridviewcell,文本框作为它托管的控件.现在我如何在代码的其他部分以编程方式获得控件类型?

我像这样添加列:

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.ReadOnly = false;
col.Name = "Status";
col.HeaderText = "Status";
dgv.Columns.Add(col);
Run Code Online (Sandbox Code Playgroud)

该列中的所有单元格现在都有一个文本框.我可以将控件作为这样的文本框:

private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (dgv.CurrentCell.ColumnIndex == 5 && e.Control is TextBox)
    {
         //something
    }
}
Run Code Online (Sandbox Code Playgroud)

如何获取其他位置的单元格中托管的控件类型?如何e.Control从代码的其他部分获取,以便我可以执行以下操作:

((TextBox)dgv[i, j].EditinControl).AutoCompleteSource = AutoCompleteSource.CustomSource;
((TextBox)dgv[i, j].EditinControl).AutoCompleteCustomSource = someSource;
((TextBox)dgv[i, j].EditinControl).AutoCompleteMode = AutoCompleteMode.SuggestAppend;
Run Code Online (Sandbox Code Playgroud)

什么可以代替EditinControl上面的那一行.. ??

Igb*_*man 8

除非该单元格处于编辑模式,否则我认为您无法访问单元格的编辑控件.我认为单元格在进入编辑模式之前没有编辑控件.这可能是单元格上没有EditingControl属性的原因,但有一个DataGridView.

您可以使用单元格的EditType属性获取单元格的编辑控件类型,并且可以使用属性获取当前编辑控件DataGridView.EditingControl.

if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))     
{         
    ((TextBox)dgv.EditingControl).AutoCompleteSource =
        AutoCompleteSource.CustomSource; 
}
Run Code Online (Sandbox Code Playgroud)

  • 不,我的知识充其量只是中等水平。就像大多数人一样绊脚石。:) (2认同)