我正在使用此方法获取 DataRowView 的索引:
public static int GetIndex(this DataRowView rowView)
{
for (int i = 0; i < rowView.DataView.Count; i++)
{
if (rowView.DataView[i] == rowView)
return i;
}
return -1;
}
现在我有一个用例,其中包含返回 -1 的常规给定 RowView。
rowView.DataView
包含完全相同的 rowView,但 rowView.DataView[i] == rowView
仍然返回 false。
那么为什么会出现这种比较返回错误结果的情况,这些情况是什么?
我怎样才能防止这种情况并正确获取 DataRowView 的索引?
您可以从 DataRowView 的
.Row
属性获取行索引。
using System.Data;
using System.Reflection;
. . .
public static class Extensions
{
public static int RowId(this DataRow row)
{
FieldInfo fieldInfo = row.GetType().GetField("_rowID",
BindingFlags.NonPublic | BindingFlags.Instance);
return Convert.ToInt32(fieldInfo!.GetValue(row));
}
}
例如,
table
是一个数据表。
DataView view = table.DefaultView;
foreach (DataRowView rowView in view)
{
Debug.WriteLine($"{rowView.Row.RowId()}");
}