我一直在尝试使用下面的代码访问DataTable First列的第一个单元格值。但它返回NULL或BLANK值。
label13.Content = newDt.Rows[0][0].ToString(); //1st CODE
然后我尝试了以下代码,它解决了我的问题。不知道我的第一个代码中出现了什么错误。
label13.Content = newDt.Rows[0]["BATCH NUM"].ToString(); //2nd COde which solved Problem
知道第一个代码语句中出了什么问题。
以下是newDt的数据源
var newDt = dt.AsEnumerable()
.GroupBy(r => r.Field<string>("BATCH NUM"))
.Select(g =>
{
var row = dt.NewRow();
row["BATCH NUM"] = g.Key;
row["QTY"] = g.Sum(r => Convert.ToInt32(r.Field<string>("QTY")));
return row;
}).CopyToDataTable();
答案 0 :(得分:2)
这是因为BATCH NUM
不在索引0处。请看下面的示例。如果您确实需要使用索引来选择列,那么您必须将其作为下面的示例代码。
我认为索引不是0
var index = dt.Columns["BATCH NUM"].Ordinal;
var batchNum = dt.Rows[0][index]?.ToString();
下面的代码是模拟问题
var dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("BATCH NUM", typeof(string));
dt.Columns.Add("QTY", typeof(int));
var row = dt.NewRow();
row["BATCH NUM"] = 1;
row["QTY"] = 10;
dt.Rows.Add(row);
var val1 = dt.Rows[0][0]?.ToString(); //EMPTY
var val2 = dt.Rows[0][1]?.ToString(); //1
var val3 = dt.Rows[0][2]?.ToString(); //10
var val4 = dt.Rows[0]["ID"]?.ToString(); //EMPTY
var val5 = dt.Rows[0]["BATCH NUM"]?.ToString(); //1
var val6 = dt.Rows[0]["QTY"]?.ToString(); //10