我现在将行复制到一个空数据表并绑定它,但肯定有更好的方法…

最佳答案

不需要绑定数据表,只需要一个列表/可枚举的表。例如,如果知道行号:

DataRowView row = dt.DefaultView[1]; // second row
detailsView1.DataSource = new DataRowView[] {row};
detailsView1.DataBind();

请注意,我们必须使用DataRowView(而不是DataRow)才能获得仅限运行时的属性(即来自列的数据)。如果您有一个DataRow,这个方法可以很容易地包装在一个实用程序方法中,例如一个扩展方法:
public static DataRowView[] ForBinding(this DataRow row)
{
    foreach (DataRowView rowView in row.Table.DefaultView)
    {
        if (ReferenceEquals(rowView.Row, row))
        {
            return new DataRowView[] { rowView };
        }
    }
    throw new ArgumentException("Row not found in the default view", "row");
}

使用:
detailsView1.DataSource = row.ForBinding();
detailsView1.DataBind();

10-07 17:11