0

我在 WebForm 上有一个 ASP.NET 3.5 GridView。GridView 从通过前面代码中的 DataSourceID 属性设置的 ObjectDataSource 获取数据。ObjectDataSource 返回自定义数据类对象的列表(只是一个具有公共属性的类)以填充 GridView。

我想要做的是在另一个代码隐藏方法中使用 GridView 使用的列表。概括地说: 1. GridView 加载了来自 ObjectDataSource 的列表数据。2. 在 GridView.OnDataBound 方法中我调用 GridView.DataSource 来获取 List 对象。3.我枚举List并使用相同的数据来做一些其他的操作。

该理论是减少一次重复的方法调用和一次对后端数据库的调用。

我尝试从 GridView 的 DataBound 方法调用 DataSource 并调用 GridView.Rows[x].DataItem。在每种情况下,我只得到一个空引用异常(“对象引用未设置为对象的实例”)。

有什么办法可以实现我所追求的吗?

4

2 回答 2

0

如果我理解正确,你想要这个OnRowDataBound事件。这样,您可以使用刚刚数据绑定的行中的数据:

protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    CustomDataClass data = e.Row.DataItem as CustomDataClass;
    if (data != null) 
    {
        // access data here...
    }
}
于 2009-06-02T00:23:20.020 回答
0

但是你想要 onRowDataBound 事件吗?看起来你想要 GridView 的整个数据源的 onDataBound 事件......

因此,您不一定需要 CustomDataClass 的一个实例(行),您希望整个 CustomDataClass[] 行数组在其他地方使用。

帮助!我也需要这个。

******更新******

我找到了答案。执行以下操作并在您的 objectdatasource 中设置 OnSelected 事件:

protected void ObjectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e) { ObjectListRow[] objectArray = (ObjectListRow[])e.ReturnValue; 列表 objectList = objectArray.ToList(); }

事实证明我的数据源是一个数组,但如果你的数据源是 List<>,那么只需将 e.ReturnValue 转换为 List。

简单的俗气。

于 2009-07-01T15:55:01.310 回答