【发布时间】: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<DataRow> - 这按预期工作,sortedStus 填充有具有预期数据的行。 dt.Clear(); 正在按预期工作并删除所有行,但导致问题的 for 循环除外。
我试过dt.NewRow(); 并单独添加每个项目,但它仍然不起作用,我还尝试刷新 dgv 和数据表,但也没有用。有人有什么想法吗?
ETA:抱歉,如果这是一个重复的问题,但我似乎找不到任何与此问题有关的问题,只是尝试实际添加空行。
ETA2:尝试 dt.Rows.Clear(); 作为匿名建议具有相同的行为
【问题讨论】:
-
你不想用
dt.rows.Clear();代替dt.Clear();吗?因为除了数据之外,您还要清除表结构。 -
刚刚尝试过,它具有相同的行为,但感谢您的建议!
-
我建议添加一个 BindingSource,以便对数据表的更改立即反映在 DGV 中。 Here 就是一个例子。您应该在循环中添加一些打印以检查您尝试添加的数据。
-
您需要澄清“什么”
sortedStus是……您声明 “sortedStus 是一个 DataRow 列表”……这很奇怪。这是否意味着sortedStus是List<DataRow>?如果是这种情况,那么您能否展示Split_List(stuRows);正在做什么以及它正在返回什么?我只是说拥有DataRows的“列表”很奇怪,因为DataRows必须源自某些DataTable。你能澄清一下吗? -
sortedStus是List<DataRow>是的。Split_List(stuRows)用于递归地将列表分解为长度为 1 的List<DataRow>s,其中将有一个字段通过另一种方法进行比较和排序,Sort_Lists返回一个List<DataRow>。这按预期工作并正确订购DataRows。DataRows源自DataGridView,并通过将DataRowView转换为DataRow的 foreach 循环添加到另一个List<DataRow>、stuRows,然后将其添加到stuRows- 这也有效符合预期