如何根据子字符串对Telerik GridBoundColumn内容进行排序?

时间:2013-04-10 19:40:37

标签: vb.net sorting telerik

我有以下内容:

<telerik:GridBoundColumn HeaderText="Name(s)" UniqueName="colNames" DataField="NameList"
                    AllowSorting="false">

绑定到此的数据来自SQL存储过程,我无法在不影响其他页面的情况下进行修改。我需要通过子串对这些项进行排序;要显示的字段是“Firstname Lastname”,我需要对姓氏进行排序。有没有办法修改上面的内容来排序''之后的子字符串?我知道这是找到姓氏(F. Murray Abraham =='M')的不完美解决方案,但这是我负责实施的方法。

我正在尝试使用Telerik SortExpression,但无法弄清楚语法(假设它甚至可用于此目的)。

如果有帮助,站点代码隐藏是用VB.NET构建的。

1 个答案:

答案 0 :(得分:3)

最好的方法是通过向包含姓氏的返回数据集添加新列来修改存储过程,前提是姓氏列与第一个名称分开定义。这不会影响已经使用存储过程的其他页面,除非您在这些页面上使用AutoGeneratedColumn作为RadGrid。

如果从存储过程返回的名称列是完整格式(即“John Smith”)和/或无法从存储过程中向返回的数据集添加字段,则必须在代码隐藏:

  1. 执行存储过程并使用返回的数据集填充DataTable
  2. 将类型为String的新列'LastName'添加到DataTable对象
  3. 对于DataTable中的每一行,从“NameList”列中提取姓氏
  4. 将其分配到“LastName”列
  5. 将修改后的DataTable对象设置为RadGrid.DataSource
  6. 请记住将SortExpression =“LastName”添加到上面的GridBoundColumn标记,并且AllowSorting =“true”。

    提取姓氏:

        If Not IsDBNull(row!NameList) Then
            Dim nameparts() As String = Cstr(row!NameList).Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
            If nameparts.Count > 0 Then
                row!lastname = nameparts.GetUpperBound(0)
            End If
        End If