我在 gridView 中对列进行排序时遇到问题。我只想选择列中名称相同的那些行,例如“完成”
我的 gridView 由几个 BoundField 和 TamplateFields 组成。当我想按正确的 BoundField 排序时,我将正确的字符串放入属性 FilterExpression。例如:
GridView 中的字段:
<asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />
所以我设置
FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"
其中 identifier 是 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 组成。例如:Failed、InProgress、Finish ... 在这个控件中,我创建了公共(public)属性 Filter,我想分配字符串值,该值将选择适当的列并对它们进行排序。
Filter = "[???] = '" + ddlCaseStatus.SelectedValue + "'";
然后在gridView中使用它:
FilterExpression = ucCaseFilter.Filter;
我不知道如何获取列名称或其他让我按“状态”列排序的方法。
如果我不明白以前的回答,它指的是正确的解决方案
最佳答案
更改您的 <asp:TempleteField />
添加<HeaderTemplate />
带有 LinkButton
的标记像这样:
<asp:TemplateField SortExpression="Status">
<HeaderTemplate>
<asp:LinkButton ID="lnkSort" runat="server" Text="Status" CommandName="Sort" CommandArgument="Status" />
</HeaderTemplate>
</asp:TemplateField>
并在grd_RowCommand
事件句柄“排序”命令并使用 CommandArgument
构建您的过滤器字符串
protected void grd_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("Sort"))
{
FilterExpression = e.CommandArgument.ToString() + " LIKE '%" + txtCaseNumber.Text + "%'";
BindGridView();
}
}
关于asp.net - 按适当的列(即 TemplateField)对 gridView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661086/