【问题标题】:DataTable Rows.Add() property only adding empty rows even when using a populated DataRow [duplicate]DataTable Rows.Add() 属性仅添加空行,即使使用填充的 DataRow [重复]
【发布时间】:2021-10-30 18:58:02
【问题描述】:

我有一个 DataGridView,我试图清空然后将数据放回,但无论我尝试用什么方法填充 dgv,我只会得到空行。

我有这段代码,但无论我尝试什么,dt.Rows.Add(sortestStus[row]) 总是会导致添加一个空行。

sortedStus = Split_List(stuRows);

DataTable dt = (DataTable)dgvClassStuInfo.DataSource;
dgvClassStuInfo.DataSource = dt;
dt.Clear();

for (int row = 0; row < sortedStus.Count; row++)
{
    dt.Rows.Add(sortedStus[row]);
}

sortedStus 是由合并排序填充的List&lt;DataRow&gt; - 这按预期工作,sortedStus 填充有具有预期数据的行。 dt.Clear(); 正在按预期工作并删除所有行,但导致问题的 for 循环除外。

我试过dt.NewRow(); 并单独添加每个项目,但它仍然不起作用,我还尝试刷新 dgv 和数据表,但也没有用。有人有什么想法吗?

ETA:抱歉,如果这是一个重复的问题,但我似乎找不到任何与此问题有关的问题,只是尝试实际添加空行。

ETA2:尝试 dt.Rows.Clear(); 作为匿名建议具有相同的行为

【问题讨论】:

  • 你不想用dt.rows.Clear(); 代替dt.Clear(); 吗?因为除了数据之外,您还要清除表结构。
  • 刚刚尝试过,它具有相同的行为,但感谢您的建议!
  • 我建议添加一个 BindingSource,以便对数据表的更改立即反映在 DGV 中。 Here 就是一个例子。您应该在循环中添加一些打印以检查您尝试添加的数据。
  • 您需要澄清“什么”sortedStus 是……您声明 “sortedStus 是一个 DataRow 列表”……这很奇怪。这是否意味着sortedStusList&lt;DataRow&gt;?如果是这种情况,那么您能否展示 Split_List(stuRows); 正在做什么以及它正在返回什么?我只是说拥有DataRows 的“列表”很奇怪,因为DataRows 必须源自某些DataTable。你能澄清一下吗?
  • sortedStusList&lt;DataRow&gt; 是的。 Split_List(stuRows) 用于递归地将列表分解为长度为 1 的 List&lt;DataRow&gt;s,其中将有一个字段通过另一种方法进行比较和排序,Sort_Lists 返回一个 List&lt;DataRow&gt;。这按预期工作并正确订购DataRowsDataRows 源自 DataGridView,并通过将 DataRowView 转换为 DataRow 的 foreach 循环添加到另一个 List&lt;DataRow&gt;stuRows,然后将其添加到 stuRows - 这也有效符合预期

标签: c# winforms


【解决方案1】:

我想出了一个解决方案

我的问题实际上与 Simple way to convert datarow array to datatable 重复

我需要将dt 初始化为DataTable 的新实例并使用sortedStus.CopyToDataTable() 填充它,然后将我的DataGridView 的数据源设置为dt

现在结束问题。

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 2013-12-27
    • 2020-06-14
    • 2017-01-30
    • 2012-09-29
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多