我在WebForm上有一个ASP.NET 3.5 GridView。 GridView从ObjectDataSource获取数据,该数据通过前面代码中的DataSourceID属性设置。 ObjectDataSource返回一个自定义数据类对象的List(只是一个带有公共属性的类)来填充GridView。
我想要做的是在另一个代码隐藏方法中使用由GridView编写的List。在高层: 1. GridView加载了来自ObjectDataSource的List数据。 2.在GridView.OnDataBound方法中,我调用GridView.DataSource来获取List对象。 3.我枚举List并使用相同的数据进行其他操作。
该理论是一个较少重复的方法调用,少一个对后端数据库的调用。
我尝试从GridView的DataBound方法调用DataSource并调用GridView.Rows [x] .DataItem。在每种情况下,我只获得一个Null引用异常(“对象引用未设置为对象的实例”)。
有没有办法实现我追求的目标?
答案 0 :(得分:0)
如果我理解正确,您需要OnRowDataBound
event。这样,您可以使用来自刚刚数据绑定的行的数据:
protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
CustomDataClass data = e.Row.DataItem as CustomDataClass;
if (data != null)
{
// access data here...
}
}
答案 1 :(得分:0)
但是你想要onRowDataBound事件吗?看起来你想要GridView的整个数据源的onDataBound事件...
因此,您不一定需要CustomDataClass的一个实例(行),您希望整个CustomDataClass []数组行在其他地方使用。
HELP!我也需要这个。
****** ****** UPDATE
我找到了答案。执行以下操作并在objectdatasource中设置OnSelected事件:
protected void ObjectDataSource_Selected(object sender,ObjectDataSourceStatusEventArgs e) { ObjectListRow [] objectArray =(ObjectListRow [])e.ReturnValue; List objectList = objectArray.ToList(); }
事实证明我的数据源是一个数组,但如果你的是一个List<>然后将e.ReturnValue转换为List。
EASY CHEESY。