在动态创建的GridView中动态创建CheckBox

时间:2016-10-17 03:25:30

标签: asp.net vb.net gridview checkbox

我有一个问题,我搜索了很多,但没有工作的答案 问题是:我动态创建gridview,然后将动态创建的复选框添加到gridview并添加但是当我试图获取复选框状态(已选中或未选中)时,我无法到达复选框 请帮助我,感谢这个greate网站

 Dim MessagesTable As DataTable = Recipient.CreateInboxMessagesTable(LoginName, WhatToShow)
    Dim Tbl As New DataTable
    Dim Col As DataColumn
    Dim Row As DataRow

    Col = New DataColumn("ID", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("Select", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("Sender", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("Subject", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("ReceiveDate", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("Privacy", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("ImportanceLevel", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("JustDate", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("LastReplyID", GetType(String)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("Status", GetType(Integer)) : Tbl.Columns.Add(Col)
    Col = New DataColumn("From", GetType(String)) : Tbl.Columns.Add(Col)
    For Each TRow As DataRow In MessagesTable.Rows
        Row = Tbl.NewRow
        Row("ID") = TRow.Item("ID_Rec")
        'Row("Select") = New CheckBox
        Row("Sender") = Member.GetUserName(TRow.Item("From_Msg"))
        Row("Subject") = TRow.Item("Subject_Msg") & " =+-+= " & Message.HTMLToText(TRow.Item("Body_Msg"))
        Row("ReceiveDate") = Recipient.Convert24TimeTo12(TRow.Item("ReceiveDate_Rec")).Substring(11)
        Row("Privacy") = TRow.Item("Privacy_Msg")
        Row("ImportanceLevel") = TRow.Item("ImportanceLevel_Msg")
        Row("JustDate") = TRow.Item("ReceiveDate_Rec")
        Row("LastReplyID") = TRow.Item("LastReplyID_Msg")
        Row("Status") = TRow.Item("Status_Msg")
        Row("From") = TRow.Item("From_Msg")
        Tbl.Rows.Add(Row)
    Next
    aGrid.DataSource = Tbl
    aGrid.DataBind()

这就是我如何创建我的网格视图和代码,如下我添加复选框

 For Each GVRow As GridViewRow In aGrid.Rows
                   Dim CB As New CheckBox
        GVRow.Cells(1).Controls.Add(CB)
    Next

这就是我试图获得复选框状态但是没有用的

 Protected Sub btnCompleted_Click(sender As Object, e As EventArgs) Handles btnCompleted.Click
    For Each Row As GridViewRow In gvInbox.Rows
        Dim cbSelect As CheckBox = DirectCast(Message.FindControlRecursive(Row, "CB"), CheckBox)
        'If cbSelect.Checked = True Then

        'End If
    Next
End Sub

谢谢

2 个答案:

答案 0 :(得分:0)

所有代码看起来都不错。但是您在没有任何ID的情况下将Checkbox添加到gridview。

For Each GVRow As GridViewRow In aGrid.Rows
        Dim CB As New CheckBox
        CB.ID = "chkRow" // Is the ID for checkbox
        AddHandler CB.CheckedChanged, AddressOf CheckedChaged // Could add event to the checkbox
        CB.AutoPostBack = True // make Autopostback to true to handle postback
        GVRow.Cells(1).Controls.Add(CB) // then add your control to specific position
Next

您必须创建复选框实例,然后设置属性(ID,Autopostback)值,以便您可以使用该特定ID获取控制值

 For Each row As GridViewRow In GridView1.Rows
        If row.RowType = DataControlRowType.DataRow Then
            Dim chkRow As CheckBox = TryCast(row.Cells(0).FindControl("chkRow"), CheckBox) //same ID to find that control
            If chkRow.Checked Then
              //Your Logic
          End If
        End If
    Next

答案 1 :(得分:0)

我通过将templateField和item模板添加到HTML Code GridView找到了我的问题的解决方案,然后它会找到复选框控件

<Columns>
 <asp:TemplateField HeaderText="Select">
 <ItemTemplate>
  <asp:checkbox ID="cbSelect" runat="server"/>
 </ItemTemplate>
 </asp:TemplateField>
</Columns>