我有一个DataGridView,其只读模式设置为true(不可编辑),它在表单加载时从数据库获取值。当我将只读模式设置为false(可编辑模式)时,我希望特定列(例如,Department)可以作为ComboBox显示,因此我可以从那里选择值。当我进入只读模式时,ComboBox应该消失,DataGridView应该正常可见。怎么实现呢? 我正在使用C#framework 4.0,Winforms
答案 0 :(得分:4)
请参阅ComboBox with read only behavior处的实施。
您还可以根据DataGridView
属性的只读更改时间来更改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;
}
可编辑:
Editable http://i51.tinypic.com/5e7o1w.jpg
只读:
答案 1 :(得分:1)
我解决了我的问题,只是想在这里发布。进入编辑模式时,运行以下代码可以解决问题。
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函数的可重入调用。
答案 2 :(得分:1)
如果要隐藏所选行的组合框,可以使用DataGridViewComboBoxDisplayStyle属性
选项是ComboBox,DropdownBox或None
在示例中 - 如果第2列中有值
,则仅显示第4列中的ComboBoxFor 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