1

チェックボックスのステータスの検出に問題があります。チェックボックスが入ったグリッドビューがあります。Ad iは、選択した行から特定の値を取得して、それをクエリに渡す必要があります。

しかし、問題は、GridViewの行を反復処理すると、選択されているチェックボックスと選択されていないチェックボックスを判別できないことです。プロセスは単にこの条件文を入力しません:

Dim chk As CheckBox  
 ....
        chk = CType(rowItem.Cells(0).FindControl("CheckBox1"), CheckBox)
        If chk.Checked Then
            Primaryid &= GridView1.DataKeys(rowItem.RowIndex)("account_id").ToString()
        End If

このタイプの条件文も試しました。しかし、それもうまくいきません:

Dim Chkb As CheckBox = (CType(gvr.FindControl("CheckBox1"), CheckBox))
        If Chkb IsNot Nothing AndAlso Chkb.Checked Then
            Primaryid = gvr.Cells(0).Text
        End If

これは、実行をトリガーするボタンのVBバックエンドコードの機能です。

Protected Sub RegBtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RegBtn.Click
    Dim Primaryid As String = "Initial stage"
    Dim chk As CheckBox  

    For Each rowItem As GridViewRow In GridView1.Rows
        chk = CType(rowItem.Cells(0).FindControl("CheckBox1"), CheckBox)
        If chk.Checked Then
            Primaryid &= GridView1.DataKeys(rowItem.RowIndex)("account_id").ToString()
        End If
    Next

    Dim exmess As String = "alert('" & Primaryid & "')"
    Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", exmess, True)

End Sub

これが私がGridViewに入力する方法です:

        Dim StrQwery As String = "SELECT account_id, account_name bla bla bla"       
        Dim smd As MySqlCommand
        smd = New MySqlCommand(StrQwery, myconn)
        smd.CommandType = CommandType.Text

        Dim da As New MySqlDataAdapter(smd)
        Dim cb As New MySqlCommandBuilder(da)
        Dim ds As New DataSet()
        da.Fill(ds)

        GridView1.DataSource = ds.Tables(0)
        GridView1.DataBind()

これは、フロントパートのグリッドビューのコードです。

 <asp:GridView ID="GridView1" runat="server"  CellPadding="4" ForeColor="#333333" 
        GridLines="None" Width="1500px">
        <Columns>

                    <asp:TemplateField >
                        <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" textAlign="right"  /> 
                        </ItemTemplate>

                    </asp:TemplateField>


          </Columns>
        <AlternatingRowStyle BackColor="White" />
        <EditRowStyle BackColor="#2461BF" />
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#F5F7FB" />
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
        <SortedDescendingCellStyle BackColor="#E9EBEF" />
        <SortedDescendingHeaderStyle BackColor="#4870BE" />
    </asp:GridView>

何が間違っているのか、結果を出すために何を変更すればよいのか、本当に理解できません。あなたがそれを手伝ってくれるなら、非常にありがたいです。

4

2 に答える 2

0

こんにちは、ボタンクリックアクション内でこのコードを試してください

 For Each rowItem As GridViewRow In GridView1.Rows
    If rowItem.RowType = DataControlRowType.DataRow Then
        Dim chk As CheckBox = TryCast(rowItem.FindControl("CheckBox1"), CheckBox)
        Dim lbl As Label = TryCast(rowItem.FindControl("primarylbl"), Label)

        Dim Primaryid As String = Nothing
        If chk.Checked Then
            Primaryid += lbl.Text
        End If
    End If
Next

それが動作します

于 2013-03-01T13:18:25.453 に答える
0

このループで

 For Each rowItem As GridViewRow In GridView1.Rows
    chk = CType(rowItem.Cells(0).FindControl("CheckBox1"), CheckBox)
    If chk.Checked Then
        Primaryid &= GridView1.DataKeys(rowItem.RowIndex)("account_id").ToString()
    End If
Next

から変更する

  chk = CType(rowItem.Cells(0).FindControl("CheckBox1"), CheckBox)

  chk = CType(rowItem.FindControl("CheckBox1"), CheckBox)

また、これは不可能です

Dim Chkb As CheckBox = (CType(gvr.FindControl("CheckBox1"), CheckBox))

代わりにこれを試してください

Dim Chkb As CheckBox = (CType(rowItem.FindControl("CheckBox1"), CheckBox))
于 2013-03-01T12:33:49.450 に答える