1

我有以下内容:

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

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

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

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

4

1 回答 1

3

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

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

  1. 执行存储过程并使用返回的数据集填充 DataTable
  2. 将 String 类型的新列“LastName”添加到 DataTable 对象
  3. 对于 DataTable 中的每一行,从“NameList”列中提取姓氏
  4. 将其分配给“姓氏”列
  5. 将修改后的 DataTable 对象设置为您的 RadGrid.DataSource

请记住将 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
于 2013-04-11T02:45:02.830 回答