【问题标题】:DataGridView row is being cleared at validationDataGridView 行在验证时被清除
【发布时间】:2012-09-21 10:46:27
【问题描述】:

我有一个 DataGridView,我需要运行一个 CellValidating 事件以确保从 ComboBox 中只选择有效值。这是必需的,因为 ComboBox 包含用于显示类别的虚拟行,用户可以选择的字段列在每个类别下方。

虽然我的验证代码工作正常,但有一个不受欢迎的副作用,即所有值都被从正在验证的行中擦除。我已将事件处理程序中的代码剥离到此,问题仍然存在:

private void dgvInformation_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    DataGridView dgv = this.dgvInformation;    
    DataGridViewCell cell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex];
}

如果我删除了

DataGridViewCell cell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; 

line 那么问题就不会发生。

DGV 未绑定,我认为这是导致问题的原因。作为测试,我制作了一个简单的表单并填充了未绑定的 DGV 值,并且每次 CellValidating 事件触发该行时都会被清除,但是当我创建 List 并将其用作 DataSource 时,值不会被清除。这可能是未绑定 DGV 的错误吗?

非常感谢

【问题讨论】:

    标签: c# .net datagridview


    【解决方案1】:

    我对句子有疑问:“确保仅从 ComboBox 中选择有效值。”使用组合框实际上应该防止在文本框等控件中提示错误的值,为什么不只在组合框中显示有效值,或者如果您需要验证组合框的组合,则在完成所有销售后进行验证,因此您可能需要一些东西像一个提交按钮来运行验证例程。

    如果您仍然认为必须在每次销售后验证组合框,那么您必须以某种方式在组合框的 SelectionChanged 事件上运行验证。

    【讨论】:

    • 需要验证的原因是ComboBox 显示一个Category 名称,其值为-1,并且在每个Category 下列出了以数据库ID 作为值的字段。如果值为 -1,我使用验证事件将事件 args Cancel 属性设置为 true
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2012-11-23
    • 2020-08-13
    相关资源
    最近更新 更多