You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用DataTable.Rows.Add传入已填充DataRow仅新增空行问题排查

问题原因

  • DataRow与所属DataTable强绑定,若sortedStus中的行不属于当前操作的dt实例,或是在调用dt.Clear()/dt.Rows.Clear()后原属于dt的行被标记为脱离状态,直接调用dt.Rows.Add()传入这类行都无法正常读取数据,仅会插入空行。
  • 代码中dgvClassStuInfo.DataSource = dt;为多余重复赋值,dt本身已经是控件绑定的数据源,修改dt内容会自动同步到DataGridView。

解决方案

可根据实际场景选择以下任意一种方案:

方案1:使用ImportRow导入行(适用于行来自其他表或已被脱离)

ImportRow方法会自动复制目标行的所有字段数据到当前表,不受行所属表限制:

sortedStus = Split_List(stuRows);
DataTable dt = (DataTable)dgvClassStuInfo.DataSource;
dt.Rows.Clear();
foreach (DataRow stuRow in sortedStus)
{
    dt.ImportRow(stuRow);
}

方案2:插入字段值数组(通用方案)

直接提取行的字段值数组传入Add方法,无需关心行的所属表:

sortedStus = Split_List(stuRows);
DataTable dt = (DataTable)dgvClassStuInfo.DataSource;
dt.Rows.Clear();
foreach (DataRow stuRow in sortedStus)
{
    dt.Rows.Add(stuRow.ItemArray);
}

方案3:排序替代方案(仅需对原表数据排序时推荐)

如果需求只是对原有DataTable的数据排序,不需要拆分再回填,可直接通过DataView实现:

DataTable dt = (DataTable)dgvClassStuInfo.DataSource;
// 替换为实际要排序的列名,ASC为升序,DESC为降序
dt.DefaultView.Sort = "排序列名 ASC"; 
dgvClassStuInfo.DataSource = dt.DefaultView.ToTable();

内容的提问来源于stack exchange,提问作者budywudy9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:09:06