按正确的列(即 TemplateField)对 gridView 进行排序

2024-06-24

我在 gridView 中排序列时遇到问题。我只想选择列中名称等于“完成”的那些行

我的 gridView 由一些 BoundField 和 TamplateFields 组成。当我想按正确的 BoundField 排序时,我将正确的字符串放入属性 FilterExpression 中。例如:

GridView 中的字段:<asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />

所以我设置FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"

where 标识符是 BoundField 中的 DataField 并且在这种情况下一切正常。 但是,当我想从 TempateField 中名称等于 Fininish 的列中选择正确的行时,我不知道应该如何做。 TemplateField 的示例如下所示:

<asp:TemplateField HeaderText="Status" SortExpression="Status">
                    <ItemTemplate>
                        <asp:Label ID="lblStatus" runat="server" Text='<%# Utils.ConvertToProcessStatus((int)Eval("status"))%>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

如果有人知道我该怎么做?

感谢帮助。


没关系,但我忘了提到我有自己的用户控件(ucCaseFilter),它由我从中选择状态的 DropDownList 组成。例如:失败、进行中、完成...在此控件内,我创建公共属性过滤器,我想分配字符串值,该值将选择正确的列并对它们进行排序。

Filter = "[???] = '" + ddlCaseStatus.SelectedValue + "'"; 

然后在 gridView 中使用它:

FilterExpression = ucCaseFilter.Filter;

我不知道如何获取列名称或其他可以让我按“状态”列排序的方法。

如果我不明白之前的答案并且它指的是正确的解决方案


改变你的<asp:TempleteField /> to add <HeaderTemplate />标记为LinkButton像这样:

<asp:TemplateField SortExpression="Status">
    <HeaderTemplate>
        <asp:LinkButton ID="lnkSort" runat="server" Text="Status" CommandName="Sort" CommandArgument="Status" />                
    </HeaderTemplate>
</asp:TemplateField>

and in grd_RowCommand事件处理“排序”命令并使用CommandArgument构建您的过滤字符串

protected void grd_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Sort"))
    {
        FilterExpression = e.CommandArgument.ToString() + " LIKE '%" + txtCaseNumber.Text + "%'";
        BindGridView();
    }   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按正确的列(即 TemplateField)对 gridView 进行排序 的相关文章

随机推荐