【问题标题】:C# DataGridView with updatable DataSource带有可更新数据源的 C# DataGridView
【发布时间】:2021-11-17 01:29:11
【问题描述】:

我有一个 DataGridView 和多个包含数据的对象,每次在选择其中一个对象之间切换时,我想填充 DataGridView。我还想在每次编辑 DataGridView 时更新这些对象中的数据。

DataGridView 已经有预定义的列,其中一些是 ComboBox 列。

说我有

public class OB()
{
    public DataTable data { get; private set; } = new DataTable();
}

obj1 = new OB();
obj2 = new OB();
.
.
.
public void some_selection_event(object s, EventArgs e)
{
    dataGridView1.DataSource = ((OB)s).data;
}

如果我在 obj1.data 绑定到它的 DataSource 时编辑 dataGridView1,然后在将 obj1.data 再次绑定到它之前绑定其他东西到它,dataGridView1 表明它只记住它的行数当我用obj1.data 绑定到它的DataSource 编辑它时,单元格中的数据丢失了,每个单元格都是空的。

有没有一种方法可以轻松地将 DataSource 映射到 DataGridView,然后自动更新,或者我在这里遗漏了什么?

【问题讨论】:

  • 我不明白倒数第二段在表达什么。如果网格有DataSource 并且用户对网格中的某些单元格进行了更改……那么DataSource 会同时更新以反映这些更改。更改网格数据源不应删除在之前的DataSource 中所做的更改。换句话说,如果您将网格重新绑定到之前的DataSource,那么之前所做的更改应该仍然存在。抱歉,如果我遗漏了什么。
  • 一个合乎逻辑的结论,我的朋友,但对我来说不是这样。来回切换,重新绑定不同的 DataSource,唯一反映所做更改的是 DataGrid 中的空行数。 Alos,也许我对此不够清楚,但我直接从自身编辑 dataGrid,而不是在 TextBox 之外,也不是按钮来提交更改。我认为 EditMode 是 EditOnEnter
  • “一个合乎逻辑的结论,我的朋友,但对我来说不是那样的。” ...这不是一个“合乎逻辑的结论”...这是一个事实...我可以证明这一点。我的观点是……您的“结论”即数据未按您描述的那样保存,这是不正确的。你可能想用谷歌搜索…DataAdapter…请提供一个minimal reproducible example来证明/复制你的主张。

标签: c# datagridview


【解决方案1】:

如果您在DataGridView 中预定义了Columns,请使用DataGridView.DataPropertyName 确保DataSourceDataGridView 都在寻址相同的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2014-01-02
    • 2010-09-20
    • 2017-05-27
    • 2021-09-15
    相关资源
    最近更新 更多