1

Linqdatasourceにバインドされたフィルタリングとページ付け(一度に10)を備えたGridViewがあります。これはすべて機能します。

しかし、すべての行の取得が完了した後、LinqDataSourceで取得されたすべてのデータのIDを取得するにはどうすればよいですか?

このメソッドがあり、e.Resultはこのグリッドのリストを含むオブジェクトデータ型です

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        for (int idx = 0; idx < e.TotalRowCount; idx++)
        {
            Foo foo = (Foo)(e.Result[idx]);  // error cannot apply indexing to expression of type object
            ids.Add(foo.Id);
        }
    }
}

私のエラーはオブジェクトを反復処理していますが、これはどのように行うことができますか?

4

2 に答える 2

1

次のいずれかを実行できます。

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        List<Foo> fooList = ((IEnumerable)e.Result).ToList();
        for (int idx = 0; idx < fooList.Count; idx++)
        {
            Foo foo = fooList[idx];
            ids.Add(foo.Id);
        }
    }
}

または

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  // event fires after data retrieval complete.
{
    List<int> ids = new List<int>();
    if (e.TotalRowCount > 0)
    {
        foreach(Foo foo in (IEnumerable)e.Result)
        {
            ids.Add(foo.Id);
        }
    }
}

Selectedがフィルタリングされたビューの結果である場合、e.Resultは匿名型のIEnumerableになるため、情報を取得するには、IQueryableオブジェクトとviewmodelオブジェクトを使用する必要があります。

于 2012-07-17T18:41:42.383 に答える
1

e.Resultはであるobjectため、インデックスを適用できるようにするには、リストタイプにキャストする必要があります。

Foo foo = ((List<Foo>)(e.Result))[idx];
于 2012-07-17T18:42:34.683 に答える