5

我有一个 Telerik RadGrid,它的 GridTemplateColumn 包含一个复选框,如下所示:

<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 的方法,它不会生成复选框的可迭代列表。遍历模板列中的复选框的正确方法是什么?谢谢!

4

2 回答 2

16

Telerik 在他们的论坛上给我回复了答案,如下:

foreach (GridDataItem item in MyRadGrid.MasterTableView.Items) 
{ 
  CheckBox chk = (CheckBox)item.FindControl("MyCheckBox");
  // Set the value here
}

希望这对某人有用!

于 2010-04-07T16:23:55.267 回答
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

'检查是否包含受保护的 Sub RadGrid2_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles 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
于 2010-06-09T03:16:09.653 回答