gpt4 book ai didi

c# - DataGridView 验证错误在排序时丢失。根本没有对数据源更新进行验证

转载 作者:行者123 更新时间:2023-11-30 17:50:19 25 4
gpt4 key购买 nike

我有一个 DataGridView,我通过 BindingSource 绑定(bind)到一个 DataTable。简单的示例代码。

DataTable records;
BindingSource bindRecords;

private void InitGrid() {
records = new DataTable();
records.Columns.Add(new DataColumn("text", typeof(string)));

bindRecords = new BindingSource();
bindRecords.DataSource = records;

dgvRecords.DataSource = bindRecords;
}

然后我像这样使用 CellValidating 事件:

private void dgvRecords_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
if(e.ColumnIndex == dgvRecords.Columns["text"].Index) {
if(e.FormattedValue.ToString() == "error") {
dgvRecords[e.ColumnIndex, e.RowIndex].ErrorText = "Oops!";
}
}
}

现在,当用户输入文本“error”时,单元格中会显示一个错误图标。到目前为止一切顺利。

但是如果我对列进行排序,验证就会丢失。我了解,为了触发单元格验证事件,必须输入然后离开单元格。

像这样以编程方式插入数据时,我也遇到了同样的问题:

private void btnAddRecord_Click(object sender, EventArgs e) {
records.Rows.Add(new object[] { "error" });
}

我将如何强制进行验证?我不想像遍历网格和设置 CurrentCell 这样的技巧。

最佳答案

您的问题是 CellValidating 事件似乎只在您退出单元格(即完成编辑)时发生。因此,我进行了测试,发现将您指定的代码放入排序后触发的另一个事件中,例如 CellPainting,可以实现您想要的效果。例如:

    private void dgvRecords_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == dgvRecords.Columns["text"].Index)
{
if (e.FormattedValue.ToString() == "error")
{
dgvRecords[e.ColumnIndex, e.RowIndex].ErrorText = "Oops!";
}
}
}

关于c# - DataGridView 验证错误在排序时丢失。根本没有对数据源更新进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20881408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com