我有一个带有GridTemplateColumn的Telerik RadGrid,其中包含一个复选框,如下所示:
<telerik:GridTemplateColumn HeaderText="MINE" UniqueName="MyTemplateColumn">
<ItemTemplate>
<asp:CheckBox id="MyCheckBox" runat="server"></asp:CheckBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
我想根据从数据库中读取的值将框设置为“已选中”。我可以处理ItemDataBound事件并在绑定每一行时读取数据库,但这会导致 n 查找。相反,我想处理DataBound,然后一次设置所有值。所以,在那种方法中,我想要这样的代码:
// read all values from database first, then...
foreach(var chkbox in MyRadGrid.MasterTableView.Columns.FindByUniqueName("MyTemplateColumn").FindControl("MyCheckBox")) {
chkbox.Checked = oneValue;
}
这不起作用,因为FindControl不是GridColumn的方法,并且它不会生成复选框的可迭代列表。迭代模板列中的复选框的正确方法是什么?谢谢!
答案 0 :(得分:16)
Telerik在他们的论坛上回复了我的答案,如下:
foreach (GridDataItem item in MyRadGrid.MasterTableView.Items)
{
CheckBox chk = (CheckBox)item.FindControl("MyCheckBox");
// Set the value here
}
希望这对某人有用!
答案 1 :(得分:1)
我遇到同样的问题..这就是我做的事情..
'创建一个现在使用的本地哈希表,否则
Private _GroupMembers As New Hashtable
'在页面加载时加载它 Private Function GetMembers()As Boolean
Try
Dim da As New DataAccess
Dim ht As New Hashtable
Dim i As Int16 = 0
ht.Add("CAC", Session("cac"))
ht.Add("GroupID", _GroupID)
If da.GetData("rap_spGetGroupMemberList", ht) = True Then
If da.SQLDataRows.HasRows Then
While da.SQLDataRows.Read()
i = i + 1
_GroupMembers.Add(i, da.SQLDataRows("UserID"))
End While
End If
da.SQLDataRows.Dispose()
End If
da = Nothing
Catch ex As Exception
Console.Write(ex.Message)
End Try
End Function
'检查包含 受保护的子RadGrid2_ItemDataBound(ByVal sender As Object,ByVal e As Telerik.Web.UI.GridItemEventArgs)处理RadGrid2.ItemDataBound
Try
If e.Item.IsDataBound Then
If Not e.Item.DataItem("UserID") Is Nothing Then
If Not IsDBNull(e.Item.DataItem("UserID")) Then
Dim UserID As Long = e.Item.DataItem("UserID")
If _GroupMembers.ContainsValue(UserID) Then
e.Item.Selected = True
End If
End If
End If
End If
Catch ex As Exception
Console.Write(ex.Message)
End Try
End Sub