使用更改或动态列值对radgrid gridtemplatecolumns进行排序

时间:2014-01-09 21:28:34

标签: sorting telerik expression radgrid

通常要对RadGrid中的列进行排序,请使用sortexpression中的textGridTemplateColumn。但现在它不同了;在这里,我有一个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

1 个答案:

答案 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隐藏和显示它们,这将需要更改合理数量的代码,因为您需要清除列的过滤器文本被隐藏,并可能将其移动到正在显示的列中。 (对不起,但我相信它会非常复杂,我没有时间去做一个例子)

以上代码均未经过测试/语法检查,但希望能为您提供合理的指示,指出下一步的位置。