【问题标题】:Get CheckBox Dynamically Created In Dynamically Created GridView获取在动态创建的 GridView 中动态创建的 CheckBox
【发布时间】:2016-10-17 03:25:29
【问题描述】:

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

 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

谢谢

【问题讨论】:

  • 你有什么异常吗?
  • 否,因为我跟踪代码并在无法获取复选框时停止它

标签: asp.net vb.net gridview checkbox


【解决方案1】:

所有代码看起来都不错。但是您在没有任何 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

【讨论】:

  • 感谢 Rojalin Sahoo 的回复。我将 ID 添加到 Checkbox 但仍然无法获取复选框
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2012-07-10
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多