WinForms DataGridView,设置必填列

时间:2011-12-20 15:24:50

标签: c# .net winforms datagridview

我正在开发一个Windows窗体项目。在我的表单中,我有一个datagrid,其列必须填入每一行。

我想获得类似于 MS Mangement Studio 的内容:如果当前行中的必填单元格未填充,则无法添加另一行。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

使用CellValidiating事件检查列的值。

这样的事情:

    const int MandatoryColumnIndex = 1;
    public Form1()
    {
        InitializeComponent();
        dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating);
        dataGridView1.RowValidating += new DataGridViewCellCancelEventHandler(dataGridView1_RowValidating);

    }

    private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
    {

        if (dataGridView1.Rows[e.RowIndex].Cells[MandatoryColumnIndex].FormattedValue.ToString() == string.Empty)
        {
            e.Cancel = true;
            dataGridView1.Rows[e.RowIndex].Cells[MandatoryColumnIndex].ErrorText = "Mandatory";
        }
        else
        {
            dataGridView1.Rows[e.RowIndex].Cells[MandatoryColumnIndex].ErrorText = string.Empty;
        }
    }

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        if (e.ColumnIndex == MandatoryColumnIndex)
        {
            if (e.FormattedValue.ToString() == string.Empty)
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].ErrorText = "Mandatory";
                e.Cancel = true;
            }
            else
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].ErrorText = string.Empty;
            }           
        }
    }