1

匿名型を GridView のソースとして使用したいと考えています。ただし、ドロップダウンリストを使用して最初にフィルタリングされます。説明させてください:私は次のように定義したタイプを持っています:

    IEnumerable<object> data = new[]{
    new{Name="McClure Wallace", Id=1, Sal=10000d, Age=29}, 
    new{Name="John Jones", Id=2, Sal=12000d, Age=27}, 
    new{Name="Gloria Flowhart", Id=3,Sal=14000d, Age=21}
            . . .
    }; 

これをドロップダウンリストのソースとして使用します。

    ddlEmployee.DataSource=data;
    ddlEmployee.DataTextField = "Name";
    ddlEmployee.DataValueField = "Id";
    ddlEmployee.DataBind();

ユーザーがリストからアイテムを選択すると、対応するオブジェクトを取得して Gridview にバインドします。

    var sel = ddlEmployee.SelectedItem.ToString();

   var selData = from d in data where **d.Id= sel** select d;
   gvSearchResults.DataSource = selData;
   gvSearchResults.DataBind();

しかし問題は、d をオブジェクトとして取得するため、d.Id でエラーがスローされることです。

どうすればこれを修正できますか。これはアプリの外部で制御されるため、「データ」の定義を変更できない場合があることに注意してください。わかりやすくするためにここに示しているだけです。

4

3 に答える 3

3

あなたの問題はあなたが使用しているということですEnumerable<object>。LINQクエリを実行すると、それIdはの一部ではないと表示されますobject

代わりにこれを試してください

var data = new[]{
new{Name="McClure Wallace", Id=1, Sal=10000d, Age=29}, 
new{Name="John Jones", Id=2, Sal=12000d, Age=27}, 
new{Name="Gloria Flowhart", Id=3,Sal=14000d, Age=21}
        . . .
};

また、d.Id= selあなたが持っているものがexacltyであるかどうかはわかりません(を除く*)。その場合は、いくつか変更する必要があります

1)なのでselstringに変換する必要がありますint

==2)比較するために使用する必要があります

于 2012-06-07T12:28:04.867 に答える
1

「動的」データ型を使用できるため、次のように機能します。

        dynamic data = new[]{
           new{Name="McClure Wallace", Id=1, Sal=10000d, Age=29}, 
           new{Name="John Jones", Id=2, Sal=12000d, Age=27}, 
           new{Name="Gloria Flowhart", Id=3,Sal=14000d, Age=21}
        };

        Console.WriteLine(data[0].Name);

これはあなたを助けますか?

于 2012-06-07T12:24:31.410 に答える
1

まず、(節のプロパティを取得するため) ではなく、 になりたいselと考えています。また、LINQ クエリと比較できるように、int にする必要があります。SelectedValueSelectedItemidwhereid

int sel = int.Parse(ddlEmployee.SelectedValue);

次に、型付きオブジェクトIEnumerableとして設定して、言及したコンパイラ エラーを回避できます。dynamic

IEnumerable<dynamic> data = new[]{
                                    new{Name="McClure Wallace", Id=1, Sal=10000d, Age=29}, 
                                    new{Name="John Jones", Id=2, Sal=12000d, Age=27}, 
                                    new{Name="Gloria Flowhart", Id=3,Sal=14000d, Age=21}
                                };

最後に ( Caludio が言ったよう==に)、 LINQ クエリで演算子を使用する必要があります。

var selData = from d in data where d.Id == sel select d;

この時点で、DataBind()問題なく実行できるはずです。

于 2012-06-07T13:19:56.100 に答える