0

手動で作成したdataTableをバインドするGridViewがあります。GridViewとdataTableの両方に、NameとisBusyの2つの列が含まれています。私のGridViewは次のようになります

<Columns>
   <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name">           
   </asp:BoundField>       
   <asp:CheckBoxField DataField="isBusy" HeaderText="Busy" SortExpression="isBusy" />   
</Columns>

特定の行を編集モードに設定しない限り、ビジー列は編集できないことを除いて、これは正常に機能します。チェックボックスの列全体をチェック可能にする必要があります。そのため、列をテンプレートに変換したので、列は次のようになります。

<Columns>
   <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name">           
   </asp:BoundField>       
   <asp:TemplateField HeaderText="Busy" SortExpression="isBusy">
       <ItemTemplate>
       <asp:CheckBox ID="isBusy" runat="server" Checked='<%# Eval("isBusy") %>' oncheckedchanged="CheckBoxBusy_CheckedChanged" />
       </ItemTemplate>
   </asp:TemplateField>       
</Columns>

これで、実行時にエラーがスローされます。

System.InvalidCastException was unhandled by user code
  Message="Specified cast is not valid."
  Source="App_Web_zzjsqlrr"
  StackTrace:
       at ASP.projects_aspx.__DataBinding__control24(Object sender, EventArgs e) in c:\Project\Users.aspx:line 189
       at System.Web.UI.Control.OnDataBinding(EventArgs e)
       at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding)
       at System.Web.UI.Control.DataBind()
       at System.Web.UI.Control.DataBindChildren()
  InnerException:

なぜこれが起こっているのか考えていますか?次のステップは、チェックボックスの状態を設定および取得する方法を知ることです(チェックボックスを手動でチェックする方法を見つけることができませんでした)。

4

1 に答える 1

0

OK、チェックボックスの値をブール値にカバーするエラーを乗り越えました:

Checked ='<%#Convert.ToBoolean(Eval( "isBusy"))%>'

現在、特定のチェックボックスを手動でチェックして、チェックボックスがクリックされたときにイベントを生成する方法が見つからないようです。何か案は?

于 2010-04-20T02:12:18.707 に答える