2011-01-12 181 views
2

私は解決策を見つけたので、私が持っていたエラーへの回答を投稿します。'System.Data.DataRowView'型のオブジェクトをキャストできません 'System.Data.DataRow'を入力します。

私はasp.netでエラーを受け取った:型のオブジェクトをキャストすることができません 'System.Data.DataRowView' とタイプする 'System.Data.DataRow'

// Old line 
// rpOutils.DataSource = ds.Tables[0].Select("rnco_lang = '" + ddlLang.SelectedValue + "'"); 
// rpOutils.DataSource = ds; // New line that caused the error. I just wanted to pass a DataSet 
rpOutils.DataSource = ds.Tables[0].Select(); // New line with the solution. 
rpOutils.DataBind(); 

protected void rpOutils_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       DataRow row = (DataRow)e.Item.DataItem; // I received the System.InvalidCastException 

...

データセットはDataRowViewを返し、問題の原因となった行はDataRowを予期していました。

解決策を探して見つからなかったので、見つけて解決策を投稿しました。ありがとう。

+0

エラーが示されているため:DataRowView row =(DataRowView)e.Item.DataItem; – Win

答えて

6

DataTableにデータバインディングするとき、データバインディングエンジンはDataTableのIListSource実装を呼び出し、そのDataViewにバインドします。

DataViewはDataRowViewオブジェクトを保持し、DataRowを保持しないため、バインドされたオブジェクトを直接DataRowにキャストできません。
代わりにDataRowViewにキャストしてからプロパティを取得する必要があります。

これがなぜ発生するのかの詳細については、my blogを参照してください。

0

動的データを使用します。それは塗りつぶされたプロパティを埋める。

​​
関連する問題