2012-10-22 67 views
0

我在我的项目上有一个数据网格,复选框为TemplateField;但我无法访问checkbox.checked属性。有人有什么主意吗?ASP的Datagrid复选框

我的ASP代码:

<asp:GridView ID="GVP" runat="server" AutoGenerateColumns="False" DataSourceID="DSP"> 
    <Columns> 
      <asp:TemplateField HeaderStyle-Width="5%" ItemStyle-Width="5%" FooterStyle-Width ="5%"> 
       <ItemTemplate> 
        <asp:CheckBox ID="SelectCb" runat="server"></asp:CheckBox> 
       </ItemTemplate> 
       <FooterStyle Width="5%"/> 
       <HeaderStyle Width="5%"/> 
       <ItemStyle Width="5%"/> 
      </asp:TemplateField> 
      <asp:BoundField DataField="Answers" HeaderText="Options" SortExpression="Answers" /> 
    </Columns> 
</asp:GridView> 

我的VB代码背后:

 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonNext.Click 
    Dim SelectedBox As Boolean = False 
    For Each row As GridViewRow In GVP.Rows 
     Dim cb As CheckBox = row.FindControl("SelectCb") 
     If cb IsNot Nothing AndAlso cb.Checked Then 
      SelectedBox = True 
      Dim RID As Integer = Convert.ToInt32(GVP.DataKeys(row.RowIndex).Value) 
     Else 
      ShowMessage("You did not select anything") 
     End if 
+0

尝试'SelectedBox = ctype(row.FindControl(“SelectCb”),TextBox).checked'。这应该工作。 – Minus

+0

你是什么意思“无法访问checkbox.checked属性”?它抛出一个错误?如果是这样,错误是什么? – Razvan

+0

当调试器进入'If cb.Checked Then'部分时;即使使用CType或DirectCast声明cb时,它也总是返回'False' –

回答

0

问题确实居住在Page_Load我在那里绑定网格到数据源;我删除了它,问题解决了。

0

试试这个:

For Each row As GridViewRow In gvTest.Rows 
    Dim cb As CheckBox = row.FindControl("SelectCb") 
    If (CType(row.FindControl("SelectCb"), CheckBox)).Checked = True Then 
     SelectedBox = True 
     Dim RID As Integer = Convert.ToInt32(gvTest.DataKeys(row.RowIndex).Value) 
    End If  
Next 
+0

它不起作用。 –

0

很难告诉你正在试图在这里做,以及如何你正在测试,但我的猜测是,这是因为你没有检查行类型。所以第一行实际上是标题,因此根本没有复选框(并且你会得到消息)。

For Each row As GridViewRow In GVP.Rows 
    If row.RowType = DataControlRowType.DataRow Then 
     Dim cb As CheckBox ...