如何按显示的值而不是数据字段值对gridview列进行排序/过滤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何按显示的值而不是数据字段值对gridview列进行排序/过滤相关的知识,希望对你有一定的参考价值。

到目前为止,我的搜索没有发现任何富有成效的东西 - 我怀疑是因为我只是不熟悉术语。如何根据网格视图中显示的内容进行排序,而不是根据后面的数据进行排序?

例如,我的SQL数据源有一个部门列表(存储为数字)。当我在gridview上显示部门时,我调用一个执行查找的函数并返回部门名称:

<asp:TemplateField HeaderText="Department" Visible="True" DataField="CurrentDepartment" SortExpression="CurrentDepartment">
    <ItemTemplate>
        <asp:Label ID="LabelDepartment" runat="server" Text='<%# gclass.GetDepartmentNameByDeptNumber(Eval("CurrentDepartment"))%>'
    </ItemTemplate>
</asp:TemplateField>

对此列进行排序按部门的数字表示顺序对结果进行排序。

当我使用带有过滤器的Telerik的RadGrid时,我遇到了类似的问题。我可以按数值搜索,但不能搜索显示的值:

<telerik:GridTemplateColumn HeaderText="Department" ItemStyle-Width="175px" FilterControlWidth="165px" Visible="True" DataField="CurrentDepartment" SortExpression="CurrentDepartment" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains">
    <ItemTemplate>
       <asp:Label ID="LabelDepartment" runat="server" Text='<%# gclass.GetDepartmentNameByDeptNumber(Eval("CurrentDepartment"))%>' Visible="true"></asp:Label>
    </ItemTemplate>
</telerik:GridTemplateColumn>

欢迎提出建议和链接!

答案

对于遇到这个寻找相同答案的人来说,我从来没有遇到过如何更改排序/过滤逻辑。

我最终做的是修改我的存储过程,返回数据。 我没有从一个表中拉出来,而是加入了4个表并返回了我需要的所有列。

因此,我现在只需使用BoundField / GridBoundColumn并直接显示每个表,而不是调用函数来显示ItemTemplate / GridTemplateColumn中的数据。 这允许排序和过滤器无需修改即可工作。

以上是关于如何按显示的值而不是数据字段值对gridview列进行排序/过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何取得gridview中选中行中的某一字段

gridview如何动态添加列,如何在添加列后显示数据

sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段

如何获取GridView中某行某列的值

asp.net里怎样通过下拉框改写Gridview某一列的值

Oracle Apex 5.1:基于 LOV(值列表)的报告列显示返回值而不是显示值