2013-03-01 40 views
1

我在檢測複選框的狀態時遇到問題。我有一個Grid View With複選框。廣告我需要從選定的行中檢索某個值以將其傳遞給查詢。CheckBox的狀態無法檢測

但問題是,當我遍歷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> 

我真的不明白我在做什麼錯,我應該改變什麼來實現結果。如果你能幫助我,我將非常感激。

+1

你肯定'CheckBox1'是'細胞[0]'?第一列通常有像select這樣的按鈕。調試和檢查,如果你看到它在控制集合 – nunespascal 2013-03-01 12:35:48

+0

無論什麼細胞價值,我把它仍然沒有返回 – meks 2013-03-01 12:56:33

回答

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)) 
+0

如果這有助於你,使它作爲答案.... – 2013-03-01 12:36:58

+0

不,我剛剛嘗試過。警報消息不返回任何內容。我仍然無法檢索ID值 – meks 2013-03-01 12:45:17

+0

我幾乎絕望。嘗試一切,但它不起作用。最難的是我不明白問題在哪裏。 – meks 2013-03-01 12:46:12

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 

這裏面的代碼,將工作

+0

,其中'primarylbl'來自哪裏?我應該在前面聲明嗎? – meks 2013-03-01 13:33:55

+0

這行有一個問題:'Dim Primaryid As String = Nothing'錯誤信息是:「primaryid隱藏了一個變量在一個封閉的塊中」 – meks 2013-03-01 13:38:45

+0

我試過這段代碼。不工作以及我不知道該怎麼做 – meks 2013-03-01 13:53:13