我有一个DataGridView
,其中一个ComboBox
列和一个TextBox
列动态创建,如下所示
DataGridViewComboBoxColumn dcColor = new DataGridViewComboBoxColumn();
dcColor.HeaderText = "Color";
dcColor.Items.Add("Red");
dcColor.Items.Add("Green");
DataGridViewTextBoxColumn dcValue = new DataGridViewTextBoxColumn();
dcValue.HeaderText = "Value";
DataGridView1.Columns.Insert(0, dcColor);
DataGridView1.Columns.Insert(1, dcValue);
现在,如果用户在ComboBox中选择“Red”项,则应禁用相应的TextBox单元格,并应以灰色显示。
如果用户选择“绿色”项,则应启用相应的TextBox单元格。
另外,如果在关闭datagridview表单之前选择了绿色,我们如何确保用户输入数据。
答案 0 :(得分:0)
使用DataGridView的CellValueChanged-Event来检查是否有任何单元格值发生了变化。对于TextBoxColumn或ComboBoxColumn,所有列类型的工作方式都相同。
检查正确的列,在您的示例中,颜色列插入位置0。 将索引1上的示例中的其他列设置为仅在选择“红色”时才读取。
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 0) {
bool disable = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "Red";
dataGridView1.Rows[e.RowIndex].Cells[1].ReadOnly = disable;
}
}
第二个问题的答案是使用Form的FormClosing-Event并验证其中的行。如果数据不正确,您可以通过设置e.Cancel = true
来取消关闭请求。
答案 1 :(得分:0)
以下代码适用于选择ComboBox中的项目
private void _DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if ((sender as DataGridView).SelectedCells[0].GetType() == typeof(DataGridViewComboBoxCell))
{
if ((e.Control as ComboBox) != null)
{
(e.Control as ComboBox).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);
(e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);
}
}
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if ((sender as ComboBox).SelectedItem.ToString() == "Red")
{
_DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = true;
}
else
{
_DataGridView.Rows[_DataGridView.CurrentCell.RowIndex].Cells[1].ReadOnly = false;
}
}