2013-02-26 63 views
0

我有一个带有复选框的GridView。但是我在确定给定行的复选框是否被选中时遇到了实际问题。无法确定网格视图中复选框的状态

我需要从行中检索某个值并将其放入代码中。但是,当我遍历GridView行时,程序不会输入检查checkBox'x状态的if语句。

这里是后端代码:

Dim Primaryid As String = "Initial stage" 
    For Each gvr As GridViewRow In GridView1.Rows 

     If (CType(gvr.FindControl("CheckBox1"), CheckBox)).Checked = True Then 
      Primaryid = gvr.Cells(1).Text 
     End If 
    Next gvr 

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

这里是GridView控件的代码。我在页面加载时自动填充它:

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

        <asp:TemplateField > 
         <ItemTemplate> 
          <asp:CheckBox ID="CheckBox1" runat="server" /> 
         </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> 

如果您能指出我的错误,我将不胜感激。

回答

0

试试这个,它在winforms中起作用。不能保证它会为你工作。我硬编码了单元格的值,应该可以按照你的方式来获取单元格。

无论如何,主要想法是检查单元格的值,而不是试图获得“检查”值(因为它们会相同)。所以我基本上将单元格值解析为一个布尔对象。

For Each r As DataGridViewRow In DataGridView1.Rows 
    Dim b As Boolean = False 
    Boolean.TryParse(r.Cells("CheckBox1").Value, b) 
    If b Then 
     'Do stuff 
    End If 
Next 

编辑:佬做的在C#中:F给我一秒钟,我会后VB:P

+0

我刚刚试过,它仍然没有得到我所选行的单元格值。它相当于处理所有的(如果我把它放在外面,如果if/else语句),或者如果它在里面 – meks 2013-02-26 08:35:59

+0

为什么yo9u放置'Cells [3]'不是我们检查总是出现在第一列的复选框的值网格视图? – meks 2013-02-26 08:39:38

+0

如果你想要选择的行应该是这样的:GridView1.SelectedRows。这要求GridView将FullrowSelect作为选择模式。 – WozzeC 2013-02-26 08:41:39

0

试一下这个可以帮助ü。

Dim Primaryid As String = "Initial stage" 
    For Each row As GridViewRow In GridView1.Rows 
     Dim chk As CheckBox = TryCast(row.Cells(0).Controls(0), CheckBox) 

     If chk.Checked Then 
     End If 
    Next 

让我知道,如果它的工作或没有

1

你必须遍历所有的行&找到你的CheckBox控件,然后检查它的选中状态。退房工作示例(我使用的在线转换器转换成VB)

Protected Sub btnGetSelectedRows_Click(sender As Object, e As EventArgs) 
Dim items = New StringBuilder() 
For Each grow As GridViewRow In GridView1.Rows 
    Dim chkTemp As CheckBox = DirectCast(grow.FindControl("chkSelectRow"), CheckBox) 
    If chkTemp IsNot Nothing Then 
     If chkTemp.Checked Then 
      items.Append(String.Format("{0},", GridView1.DataKeys(grow.RowIndex)("ProductID").ToString())) 
     End If 
    End If 
Next 

If items.Length > 0 Then 
     Response.Write("You selected Ids:" & Convert.ToString(items)) 
    End If 

End Sub 

而且ASPX

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
     AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="ProductID"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkSelectRow" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="ProductID" HeaderText="ProductID" 
       InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> 
      <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
       SortExpression="ProductName" /> 
      <asp:BoundField DataField="SupplierID" HeaderText="SupplierID" 
       SortExpression="SupplierID" /> 
      <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" 
       SortExpression="CategoryID" /> 
      <asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" 
       SortExpression="QuantityPerUnit" /> 
      <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" 
       SortExpression="UnitPrice" /> 
      <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" 
       SortExpression="UnitsInStock" /> 
      <asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" 
       SortExpression="UnitsOnOrder" /> 
      <asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" 
       SortExpression="ReorderLevel" /> 
      <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" 
       SortExpression="Discontinued" /> 
      <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" 
       SortExpression="CategoryName" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
     SelectCommand="SELECT * FROM [Alphabetical list of products]"></asp:SqlDataSource> 
    <br /> 

注意,我已经使用了

DataKeys

财产访问该行的主键。我建议你在长期运行时使用cellIndex访问单元格值时会发生同样的错误,因为将来您在gridview上更改列时会失败。

达米安。