启用或禁用基于数据网格视图的组合框值的文本框

本文关键字:视图 网格 文本 组合 数据 于数据 启用 | 更新日期: 2023-09-27 18:22:28

我有一个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);

现在,如果用户在组合框中选择"红色"项,则应禁用相应的文本框单元格,并应以灰色显示。
如果用户选择"绿色"项,则应启用相应的文本框单元格。

此外,我们如何确保用户在关闭数据网格视图表单之前选择绿色时输入数据。

启用或禁用基于数据网格视图的组合框值的文本框

使用 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;
    }
}

第二个问题的答案是使用表单的 FormClosesing-Event 并验证其中的行。您可以通过设置e.Cancel = true如果数据不正确来取消关闭请求。

以下代码适用于在组合框中选择项

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;  
    }
}