protected void Page_Load(object sender, System.EventArgs e)
{
DataTable dt = GetDataTable("select * from AccountTypes");
repeater.DataSource = dt;
repeater.DataBind();
}
private void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item) {
return;
}
var row = (DataRow)e.Item.DataItem;
}
它抛出异常“无法将‘System.Data.DataRowView’类型的对象转换为‘System.Data.DataRow’类型。”
DataRow是DataTable的一个元素,但是为什么e.Item.DataItem会变成DataRowView呢?
谁能找到提到这个的 MSDN 文档?
最佳答案
此行为由 DataTable 类定义。与典型的集合类不同,DataTable 实现了 IListSource而不是 IEnumerable。 IListSource 接口(interface)允许类“自定义”提供给 Repeater 等数据绑定(bind)控件的数据。
DataTable's IListSource implementation返回 DefaultView , 所以
repeater.DataSource = dt;
实际上等同于
repeater.DataSource = dt.DefaultView;
DefaultView 的类型是DataView ,这是一个 DataRowView 集合。这就是为什么您的数据项是 DataRowView 对象的原因。
关于c# - 为什么中继器返回的是 DataRowView 而不是 DataRow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46591143/