编辑模式下DatagridView中的ComboBox
我有一个DataGridView,只读模式设置为true(不可编辑),它从表单加载数据库获取值。 当我将只读模式设置为false(可编辑模式)时,我希望特定列(例如,Department)可以作为ComboBox显示,因此我可以从那里选择值。 当我进入只读模式时,ComboBox应该消失,DataGridView应该正常可见。 怎么实现呢? 我正在使用C#framework 4.0,Winforms
请参阅ComboBox上的实现, 其中包含只读行为 。
您还可以根据更改DataGridView
属性的readonly时更改DisplayStyle
。 将DisplayStyle
设置为DataGridViewComboBoxDisplayStyle.Nothing
将隐藏下拉按钮。
例如,通过单击按钮更改ReadOnly
属性将如下所示:
private void mChangeReadOnlyButton_Click(object sender, EventArgs e) { ComboBoxColumn2.DisplayStyle = (dataGridView1.ReadOnly) ? DataGridViewComboBoxDisplayStyle.ComboBox : DataGridViewComboBoxDisplayStyle.Nothing; dataGridView1.ReadOnly = !dataGridView1.ReadOnly; }
编辑:
可编辑http://sofzh.miximages.com/c%23/404.gif
只读:
我得到了我的问题的解决方案,只是想在这里发布。 进入编辑模式时,运行以下代码可以解决问题。
public void bgCombo(DataGridView dg) { foreach (DataGridViewRow row in dg.Rows) { DataGridViewComboBoxCell dgc = new DataGridViewComboBoxCell(); dgc.Value = row.Cells["Department"].Value; row.Cells["Department"] = dgc; } }
在将dgc设置为dataGridCell之前,我们可以在其中添加项集合。 希望能帮助到你。
问题:如果列和行索引在编辑时变得相同,我收到错误 – 操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用。
如果要隐藏所选行的combobox,可以使用DataGridViewComboBoxDisplayStyle属性
选项包括ComboBox,DropdownBox或None
在示例中 – 如果第2列中有值,则仅显示第4列中的ComboBox
For Each row As DataGridViewRow In dgv.Rows Dim Cell As DataGridViewComboBoxCell = CType(row.Cells(4), DataGridViewComboBoxCell) Cell.ReadOnly = True Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing If row.Cells(2).Value IsNot Nothing Then Cell.ReadOnly = False Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox End If Next