2016-10-17 130 views
0

我有一个问题,我搜索了很多,但没有工作的答案 问题是:我创建动态GridView,然后添加动态创建的复选框到GridView和其添加但是当IAM试图获得复选框状态(选中与否)我不能达到复选框 请帮助我,感谢这个马丽娟网站获取CheckBox在动态创建的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 

谢谢

+0

您是否收到任何异常? – Sami

+0

不,因为我追踪了代码,并在它未能取回复选框 – Ali

回答

0

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

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

所有的代码看起来不错。但是你在没有任何ID的情况下将复选框添加到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,自动回)值,这样你就可以使用特定的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 
+0

时停止它,感谢Rojalin Sahoo的回复。我将ID添加到复选框,但仍无法取回复选框 – Ali