我想在验证数据时操纵单元格中的单元格,以便如果用户输入一个对数据库无效但可以轻松转换为有效数据的值,则该程序将将值更改为适当的值。

我能够正确验证我的价值,但是当我尝试将其更改为有效的东西时,我会得到DataError。这是我的代码:

        private void unit_List_2_GroupsDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        Console.WriteLine("Validating");
        DataGridViewColumn col = this.unit_List_2_GroupsDataGridView.Columns[e.ColumnIndex];
        DataGridViewCell cell = this.unit_List_2_GroupsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];
        if (col == this.batchDataGridViewTextBoxColumn && this.unit_List_2_GroupsDataGridView.IsCurrentCellInEditMode)
        {
            Console.WriteLine("   Batch Column");
            DataRow[] rows = label_EntryDataSet.viewJobBatchList.Select(String.Format("Job={0} AND Display='{1}'"
                , comboBox1.SelectedValue, e.FormattedValue));
            if (rows.Length == 1)
            {
                Console.WriteLine("      Auto Completed item from list: {0}", rows[0]["Batch"]);
                //e.Cancel = true;
                cell.Value = rows[0]["Batch"];
                //this.unit_List_2_GroupsDataGridView.EndEdit();
            }
            else
            {
                Console.WriteLine("     No Autocomplete!");
                int i = 0;
                if (!int.TryParse(e.FormattedValue.ToString(), out i))
                {
                    Console.WriteLine("         Not an integer either");
                    e.Cancel = true;
                }
            }
        }
    }

读取的行 cell.value =行[0] [“ batch”]; 不是在做我期望的事情。

有帮助吗?

解决方案

CellValidating 事件发生在 DataGridView 留下编辑模式;这是一个与编辑控制有关的事件(DataGridView.EditingControl)。您绝不应该尝试更改此事件处理程序中的单元格值,因为除非取消事件(在这种情况下,用户陷入了编辑模式),则将单元格值设置为从编辑控件中设置为值事件结束。因此,这会撤消您在处理程序中执行的任何动作。

相反,您要做的是更改编辑控件中的值(请记住不要取消事件)。例如,对于 DataGridViewTextBoxCell, ,您将使用以下而不是问题的行:

unit_List_2_GroupsDataGridView.EditingControl.Text = Convert.ToString(rows[0]["Batch"]);

您应该发现这解决了您的问题。

其他提示

通常,最好使用 细胞置 每当您需要转换/更改单元格中的值时。从该事件中,您可以通过设置用户的值指示用户的值无效 errortext 单元或行的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top