2012-01-06 7 views
2

GridViewはアクセステーブルにバインドされていますが、asp:ButtonFieldを使用してチェックボックスを更新します。私ができる最善の方法は、チェックボックスを文字列値に置き換えることです。以下は、私が現在持っているコードです:ASP.NET 2005のasp:ButtonFieldを使用して、GridViewのバインドされたチェックボックスをプログラムで更新します。

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "check" Then 
     'Enable Editing on the GridView 
     GridView1.EditIndex = GridView1.SelectedIndex 
     'Assign value to the row selected 
     Dim index As Integer = Convert.ToInt32(e.CommandArgument) 
     'Assign selected gridview row 
     Dim selectedRow As GridViewRow = GridView1.Rows(index) 
     'Assign checkbox cell as table cell 
     Dim selectedCell As TableCell = selectedRow.Cells(0) 

     'Assign a value to the checkbox, **but instead is replacing the checkbox** 
     selectedCell.Text = "True" 
    End If 
End Sub 

すべてのご協力ありがとうございます!

答えて

4

.FindControl()を使用する必要があると思います。

GridViewCellは、CheckBoxコントロールと同じものではありません。あなたのコードはおそらくより多くのように見えるはずです:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    If e.CommandName = "check" Then 
     'Enable Editing on the GridView 
     GridView1.EditIndex = GridView1.SelectedIndex 
     'Assign value to the row selected 
     Dim index As Integer = Convert.ToInt32(e.CommandArgument) 
     'Assign selected gridview row 
     Dim checkBox As CheckBox = GridView1.Rows(index).FindControl("checkBoxIdGoesHere") 

     checkBox.Checked = true 'or false or whatever based on your command. 
    End If 
End Sub 
+0

ローカルスコープの「checkBox.Checked」をtrueに設定するだけでは不十分ですか?そのように設定するとGridViewに戻りますか? – Aaron

+0

'GridView'に戻します。あなたの答えの直接参照は機能的に同等です(少なくとも、C#であり、VBでなければなりません)。 – jwiscarson

+0

@jwiscarsonそれはあなたのコードで動作しました!私はそれをTemplateFiledに変更した後...!私はそれをすることを覚えていなかった! – JFV

1

GridView内からコントロールにアクセスする際に問題が発生しました。私は1ヶ月前に同様のことを解決しました。それを試してみて、それが動作するかどうかを確認

'Assign a value to the checkbox 
CType(GridView1.Rows(index).Cells(0).Controls(0), CheckBox).Checked = True 

:あなたのチェックボックスコントロールは、そのセル内の唯一のものであると仮定すると、あなたはこのような何かを試みることができます。もしそうでなければ、私たちはもう一度見て回ってください。

+0

本当に、本当に、このようなセルとコントロールにアクセスすべきではありません。ある列から別の列にコントロールを移動したり、セル内のコントロールの順序を変更したりすると、コードが破損します。これはあまりにも強く結合されています。 – jwiscarson

+0

@jwiscarson私は完全に同意しますが、GridViewsは制御アクセスを許可する方法に非常に精通しています。これは、成功の可能性が最も高い提案ができるすべてのものです。そして、OPが達成しようとしていることを助けるならば、彼はいつでもそれを再因子化することができます。しかし、それを最初に働かせることは時には難しいことがあります。 – Aaron

+0

@ BryceAtNetwork23 'Checked'は 'System.Web.UI.Control'のメンバーではありません... – JFV

関連する問題