- - PR -
DataGridのチェックボックスを使用不可にしたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-10-27 14:05
いつもお世話になっております。
VBでWebアプリを作成しております。 DataGridにテンプレート列を追加し、チェックボックスを用意しています。 DataGridを表示する際に、同DataGridの別の項目の値によりチェックボックスを 使用不可にしたいと思っています。 DataGrid1_ItemDataBound()を以下のようにしてみました。 ----------------------------------------------------------------------- Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound If (e.Item.ItemType = ListItemType.Item OrElse _ e.Item.ItemType = ListItemType.AlternatingItem) Or _ e.Item.ItemType = ListItemType.SelectedItem Then Dim chk As CheckBox = CType(e.Item.Cells(0).Controls(0), CheckBox) If e.Item.Cells(9).Text = "" Then e.Item.Cells(0).Enabled = False Else e.Item.Cells(0).Enabled = True End If End If End Sub ----------------------------------------------------------------------- 実行すると 「System.InvalidCastException: 指定されたキャストは有効ではありません。」 このようなエラーメッセージが表示されます。 場所は「Dim chk As CheckBox = CType(〜)」のところです。 テンプレート列の位置はCells(0)、判断する項目はCells(9)です。 よろしくお願いいたします。 |
|
投稿日時: 2005-10-27 14:20
チェックボックスにIDを振って、
FindControlメソッドを使って取得したらいかがでしょう? |
|
投稿日時: 2005-10-28 10:25
ぼのぼの様、ありがとうございます。
ASPで <asp:CheckBox 〜 Checked='<%# DataBinder.Eval(Container.DataItem, "CHECK_FLG") %>'> としてましたので、CtypeをFindControlにしてみました。 ----------------------------------------------------------------------- Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound If (e.Item.ItemType = ListItemType.Item OrElse _ e.Item.ItemType = ListItemType.AlternatingItem) Or _ e.Item.ItemType = ListItemType.SelectedItem Then Dim chk As CheckBox = e.Item.FindControl("CHECK_FLG") If e.Item.Cells(9).Text = "" Then chk.Enabled = False Else chk.Enabled = True End If End If End Sub ----------------------------------------------------------------------- 今度は 「chk.Enabled = True」のところでエラーになってしまいました。 エラー:System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 FindControlの部分に誤りがあるのでしょうか? よろしくお願いいたします。 |
|
投稿日時: 2005-10-28 10:41
どうも、SE卵です。
IDを振ってないから、e.Item.FindControl("CHECK_FLG") でNULL参照してる のだと思います。 Checked='<%# DataBinder.Eval(Container.DataItem, "CHECK_FLG") %>'> これは、CheckBox に"CHECK_FLG"という列のフィールドをバインドするという 意味になってますよ。IDつけるなら、 <asp:CheckBox id=chkID ・・・> てな感じです。 [ メッセージ編集済み 編集者: SE卵 編集日時 2005-10-28 10:42 ] |
1