0

WebフォームにASP.NET3.5GridViewがあります。GridViewは、前のコードのDataSourceIDプロパティを介して設定されたObjectDataSourceからデータを取得します。ObjectDataSourceは、GridViewにデータを入力するためのカスタムデータクラスオブジェクト(パブリックプロパティを持つクラスのみ)のリストを返します。

私がやりたいのは、GridViewによって消費されたリストを別の分離コードメソッドで使用することです。大まかに言うと、1.GridViewにはObjectDataSourceからのリストデータがロードされます。2. GridView.OnDataBoundメソッドで、GridView.DataSourceを呼び出してListオブジェクトを取得します。3.リストを列挙し、同じデータを使用して他の操作を実行します。

理論は、重複するメソッド呼び出しが1つ少なく、バックエンドデータベースへの呼び出しが1つ少ないというものです。

GridViewのDataBoundメソッドからDataSourceを呼び出し、GridView.Rows[x].DataItemを呼び出してみました。いずれの場合も、Null参照例外(「オブジェクト参照がオブジェクトのインスタンスに設定されていない」)のみが発生します。

私が求めていることを達成する方法はありますか?

4

2 に答える 2

0

しかし、onRowDataBound イベントが必要ですか? GridView のデータソース全体に対して onDataBound イベントが必要なようです...

したがって、必ずしも CustomDataClass の 1 つのインスタンス (行) が必要なわけではありません。行の CustomDataClass[] 配列全体を別の場所で使用する必要があります。

ヘルプ!これも必要です。

******アップデート******

私は答えを見つけました。これを以下のようにして、objectdatasource で OnSelected イベントを設定します。

protected void ObjectDataSource_Selected(オブジェクト送信者、ObjectDataSourceStatusEventArgs e) { ObjectListRow[] objectArray = (ObjectListRow[])e.ReturnValue; リスト objectList = objectArray.ToList(); }

私のデータソースは配列であることがわかりましたが、あなたのデータソースが List<> の場合は、e.ReturnValue をリストとしてキャストするだけです。

簡単チーズ。

于 2009-07-01T15:55:01.310 に答える
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 に答える