从BaseDataBoundControl.DataSource读取数据(ASP.NET GridView)

时间:2009-06-02 00:02:36

标签: asp.net gridview datasource

我在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引用异常(“对象引用未设置为对象的实例”)。

有没有办法实现我追求的目标?

2 个答案:

答案 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。