繁体   English   中英

立即刷新 DataGridView 单元格值

[英]Refresh DataGridView cell values immediately

我有一个带有两个复选框列的DataGridView 当检查它们两个上的任何行时,我想清除复选标记。 网格由 DataTable 填充。 它是这样工作的:

if (bothColumnsAreChecked)
{
    DataRow first = SelectedFirstItems.First();
    DataRow second = SelectedSecondItems.First();

    // stuff...

    first["IsCheckedFirst"] = false;
    second["IsCheckedSecond"] = false;
}

据此,我修改了代码以在单击复选框后立即触发CellValueChanged事件,而不是在失去焦点时:

void brandsGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    brandsGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

问题是,清除复选标记后,其中一行仍被选中(因为我只是单击了该行中的复选框),并且该行上的复选标记仍然可见——它不会消失,直到我取消选择排。 我如何做到这一点? 我试过了:

1) 在网格上Refresh() 徒劳无功; 网格被刷新,但在移动光标之前不会重绘。

2) CommitEdit()EndEdit() 这甚至不会清除最后选择的复选框。

我能做什么?

编辑:我不擅长解释。 这是一个简单的演练:

有两个复选框列:c1 和 c2。

1) 我在第 r1 行上单击 c1。 c1 变为选中状态,而 r1 变为选中状态。

2)我在第 r2 行(甚至 r1)上单击 c2。 c2 变为选中状态,而 r2 变为选中状态。

3) c1 和 c2 现在被清除(在某处记录复选框信息后)。

问题是,当 r1 中的 c1 中的 c1 标记消失时,它会保留在 r2 上的复选框中,直到 r2 失去焦点。

希望有帮助。

现在有点清楚了。 你总是可以取消选择 dgv 中的行,但我不知道这是否是你想要的

brandsGridView.ClearSelection();

我认为最简单的方法是首先为此 DataGridView 设置绑定,例如:

DataGridView dg = new DataGridView();
DataTable dt = GetDataTable();
dg.DataSource = dt;

然后当你想刷新它时,你再次设置绑定。 是的,我意识到这是肮脏的hacky方式,但它是最简单的。

DataTable dt = GetDataTable();
dg.DataSource = dt;

旧答案:我认为您可以为此使用 BindingGroup: http : //msdn.microsoft.com/en-us/library/system.windows.data.bindinggroup.aspx

我有一个非常相似的问题。 (嗯,这是一个不同的上下文,但问题是一样的)

经过大量的尝试和阅读,这个和其他相关的线程,我找到了一个解决方案。 这有点简陋,但对我有用。

该问题与具有焦点的DataGridView相关。 所以我暂时将焦点更改为另一个控件(例如按钮),然后将其带回DataGridView

在你的情况下可能是这样的:

button1.focus();
if (bothColumnsAreChecked)
{
    DataRow first = SelectedFirstItems.First();
    DataRow second = SelectedSecondItems.First();

    // stuff...

    first["IsCheckedFirst"] = false;
    second["IsCheckedSecond"] = false;
}
brandsGridView.focus();

我希望它能有所帮助。 但是,如果有人找到了更好的解决方案或更详细的解释为什么会发生这种情况。 将不胜感激。

在设置所需的单元格值后使用以下命令对我有用,这是我在Microsoft 论坛帖子上找到的。

brandsGridView.RefreshEdit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM