通常要对RadGrid
中的列进行排序,请使用sortexpression
中的text
和GridTemplateColumn
。但现在它不同了;在这里,我有一个RadGrid
,其中有几列,所有列都是GridTemplateColumns
。我有一个绑定RadGrid
的集合。
<telerik:GridTemplateColumn ItemStyle-BorderWidth="0" ItemStyle-HorizontalAlign="Left"
HeaderStyle-Font-Bold="true" UniqueName="CustomerSupplierName" ShowSortIcon="true">
<ItemTemplate>
<asp:Label ID="lblSupplierName" runat="server" />
<%-- Text='<%# Eval("SupplierNameText")%>'/>--%>
</ItemTemplate>
</telerik:GridTemplateColumn>
这是其中一个专栏。现在在数据绑定功能中我填充了网格。我的页面上有一个完全远离此网格的单选按钮列表。根据其选定的索引,我将要填充的值更改为此特定列(UniqueName="CustomerSupplierName"
)。喜欢这个
在ItemDataBound中:
If rblCustomersSuppliers.SelectedIndex = 0 Then
Dim lblSupplierName As Label = e.Item.FindControl("lblSupplierName")
lblSupplierName.Text = cont.SupplierNameText
Else
Dim lblSupplierName As Label = e.Item.FindControl("lblSupplierName")
lblSupplierName.Text = cont.CustomerOrganization
End If
因此,我根据选择绑定供应商名称或客户组织。现在我需要这个列可以排序。我怎么做?如果您需要更多信息,请询问。感谢
编辑: 的ItemDataBound
If TypeOf e.Item Is GridHeaderItem Then
If rblCustomersSuppliers.SelectedIndex = 0 Then
rgContractHistory.MasterTableView.GetColumn("CustomerName").Visible = False
rgContractHistory.MasterTableView.GetColumn("SupplierName").Visible = True
Else
item("CustomerName").Text = "Customer"
rgContractHistory.MasterTableView.GetColumn("CustomerName").Visible = True
rgContractHistory.MasterTableView.GetColumn("SupplierName").Visible = False
End If
End If
答案 0 :(得分:0)
首先,UniqueName
属性不应该用于排序,因为它应该是列的唯一标识符;相反,DataField
应该定义列(来自数据库)进行排序。
因此,您要考虑查看的事件处理程序是DataBinding
,如果使用高级数据绑定,则为NeedDataSource
。从这里可以更改分配给列的DataField
。
获取列的示例代码:
Dim columnToChange As GridTemplateColumn = CType(grdUsers.MasterTableView.Columns.FindByUniqueNameSafe("CustomerSupplierName"), GridTemplateColumn)
If rblCustomersSuppliers.SelectedIndex = 0 Then
columnToChange.DataField = "SupplierNameText"
Else
columnToChange.DataField = "CustomerOrganization"
End If
另一种方法是拥有两个单独的列,根据当前选择的RadioButton
隐藏和显示它们,这将需要更改合理数量的代码,因为您需要清除列的过滤器文本被隐藏,并可能将其移动到正在显示的列中。 (对不起,但我相信它会非常复杂,我没有时间去做一个例子)
以上代码均未经过测试/语法检查,但希望能为您提供合理的指示,指出下一步的位置。