- PR -

DataGridのチェックボックスを使用不可にしたい

1
投稿者投稿内容
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 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)です。


よろしくお願いいたします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-10-27 14:20
チェックボックスにIDを振って、
FindControlメソッドを使って取得したらいかがでしょう?
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 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の部分に誤りがあるのでしょうか?

よろしくお願いいたします。
SE卵
大ベテラン
会議室デビュー日: 2004/10/22
投稿数: 135
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)