我有一个问题,我搜索了很多,但没有工作的答案 问题是:我动态创建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
谢谢
答案 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>