在收到错误时,用户不应允许进入单元格值中的另一行/列

本文关键字:一行 单元格 错误 用户 许进入 | 更新日期: 2023-09-27 18:34:45

在我的窗口表单中,我的选项卡控件中有验证选项卡控件,如果用户在第二行/列中给出与第一行相同的名称,则实现了带有行和列的数据表 如果用户再次单击错误按钮,就会出现错误 用户应该在同一行和列中 用户不应该允许进入另一行/列,所以告诉我如何阻止用户不允许进入如果用户收到错误,则为另一个单元格请在单元格离开事件中获取代码

在收到错误时,用户不应允许进入单元格值中的另一行/列

应向数据网格视图的 CellValidating 事件添加条件,并在需要时调用 cancel。请参考 DataGridView.CellValidating Event

    private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        dataGridView1.Rows[e.RowIndex].ErrorText = "";
        // Don't try to validate the 'new row' until finished 
        // editing since there
        // is not any point in validating its initial value.
        if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; }
        DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
        bool isValid = true;
        // Convert grid view rows to an IEnumerable collection
        IEnumerable<DataGridViewRow> _dataRows = dataGridView1.Rows.Cast<DataGridViewRow>();
        // Loop through grid view rows
        for (int i = 0; i < _dataRows.Count(); i++)
        {
            if(row.Cells[e.ColumnIndex].Value == _dataRows.ElementAt(i).Cells[e.ColumnIndex].Value)
            {
                isValid = false;
                break; // To break from current loop
            }
        }
        if (!isValid)
        {
            e.Cancel = true;
            dataGridView1.Rows[e.RowIndex].ErrorText = "No duplicate values allowed.";
        }
    }

你为什么对细胞离开事件如此具体。最佳做法是举办dataGridView1_CellValidating事件或dataGridView1_CellValueChanged。如果需要获取用于比较使用的值。

    var c = dataGridView1[e.ColumnIndex, e.RowIndex].Value; // got value and proceed for comparing.

在dataGridView1_CellValueChanged事件中