従来のWebformコードを少し更新しています。古いDataGridを更新して最新のGridViewを使用しています。型付きモデル結合。強力な型のGridViewにデータテーブルをバインドすることができません
MyCustomCollectionType data = GetFromDataSource();
MyGridView.DataSource = data;
MyGridView.DataBind();
をし、Webフォームのようなものになります。:カスタマイズされたDataTableをプログラム的にGridViewにバインドされている
<asp:GridView runat="server" ID="MyGridView" ItemType="MyCustomCollectionType.MyCustomRow">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%#: Item.ID %> : <%#: Item.Name %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
をしかしDataBindを()が呼び出されたときに、何らかの理由で、私は次の例外を取得します:私はOnRowDataBound
イベントハンドラを追加し、RowType
をチェックすると
[InvalidCastException: Unable to cast object of type 'System.Data.DataRowView' to type 'MyCustomRow'.]
ASP.Test_aspx.__DataBind__control54(Object sender, EventArgs e) in D:\Bit\MyRepo\MyProject\Test.aspx:130
System.Web.UI.Control.OnDataBinding(EventArgs e) +84
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +150
System.Web.UI.Control.DataBind() +17
System.Web.UI.Control.DataBindChildren() +185
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +160
System.Web.UI.Control.DataBind() +17
System.Web.UI.Control.DataBindChildren() +185
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +160
System.Web.UI.Control.DataBind() +17
System.Web.UI.Control.DataBindChildren() +185
System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +160
System.Web.UI.Control.DataBind() +17
System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +167
System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +3721
System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +67
System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +128
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +34
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
System.Web.UI.WebControls.GridView.DataBind() +9
は、私はしかし、Sとして、それはHeader
OKをデータバインディング見ることができますそれが実際のDataRow
に当たると例外がスローされます。私がデータバインディング式を完全に削除して静的テキストを入れると、例外がなくなり、静的テキストの予想される行数が得られます。
どのように間違っているのか分かりますか?
更新
私が代わりに<asp:TemplateField>
の<asp:BoundField DataField="ID" />
と<asp:BoundField DataField="Name" />
を使用している場合興味深いことに、その後、エラーはありません。それは、データバインディング式が呼び出されて例外が発生したときだけです。