【问题标题】:Reading data from BaseDataBoundControl.DataSource (ASP.NET GridView)从 BaseDataBoundControl.DataSource (ASP.NET GridView) 读取数据
【发布时间】:2010-10-30 13:22:44
【问题描述】:

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

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

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

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

有什么方法可以实现我的目标吗?

【问题讨论】:

    标签: asp.net gridview datasource


    【解决方案1】:

    如果我理解正确,您需要OnRowDataBound event。这样,您可以使用刚刚数据绑定的行中的数据:

    protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        CustomDataClass data = e.Row.DataItem as CustomDataClass;
        if (data != null) 
        {
            // access data here...
        }
    }
    

    【讨论】:

      【解决方案2】:

      但是你想要 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。

      简单的俗气。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多