2009-04-13 8 views
0

e.Item.DataItemの値を文字列に読み込みたいのですが、何らかの理由でウォッチウィンドウで見ることはできますが、私はそれを得ることができませんDataItemから匿名型を読み取る

+0

から、次の手に入れました。 – Noldorin

+0

これは非常に曖昧です。文脈を提供してください。 Webフォーム、Windowsフォーム、.NETバージョンなど –

答えて

2

さらに詳しい情報を追加できますか?文字通り文字列値が必要なのですか、値から特定の文字列が必要ですか?

あなたはなんとかする必要があります文字列値が必要な場合。監視ウィンドウは、オブジェクトの.ToStringを呼び出すことによって値を表示する傾向があります。ウォッチウィンドウの値があなたが望む文字列であれば、ToStringを呼び出すだけでウォッチウィンドウを得ることができます。

var item = e.Item.DataItem.ToString(); 

また、さまざまなプロパティについてもヌルチェックを行う必要があります。

0

あなたのような何かをやったようですね:

obj.Datasource = (from .... select new { a=..., b=...}).ToList(); 

そして、あなたの項目のいずれかのために、あなたは「A」またはアウト、右の「B」の値を取得したいですか?

次のことができますが、それは複雑(および推奨されません)です。これを行うには、e.Item.DataItemを正しいクラスにキャストする必要がありますが、それは匿名型です。つまり、トリッキーなことなしにキャストを指定することはできません。 (e.Item.DataItem、新しい{A = ...、B = ...})ForceCastを呼び出し、その後

private T ForceCast(T prototype, object obj) 
{ 
    return (T)obj; 
} 

:あなたはこのような何かを試みることができます。私はあなたが同じアセンブリにいる場合にはうまくいくと思います(そして、aとbの値をタイプすると、コンパイラはTを推測して事態を把握します)。しかし、より良い方法は、データソースから返すデータを保持するための実際のクラスを定義することです。その後、e.Item.DataItemをそのクラスにキャストしても問題ありません。

(注:?私は実際にこのコードを実行しようとしていない - これは、これを読んでいる間、私が持っていただけと考えられていたが、私は、私は前にそれを見てきたと思っていますが、多分それはthis blogだった)

10

は、私たちが何が起こっているか理解している場合我々はそれより少しより多くの情報が必要になりますsimilar question

DataBinder.Eval(e.Item.DataItem, "PropertyName") 
関連する問題