我在gridView中排序列时遇到问题。我想只选择名称相同的列中的那些行,例如“Finished”
我的gridView包含很少的BoundField和TamplateFields。当我想通过适当的BoundField排序时,我将适当的字符串放到属性FilterExpression中。例如:
GridView中的字段:
<asp:BoundField DataField="identifier" HeaderText="Case number" SortExpression="identifier" />
所以我设定了
FilterExpression = "[identifier] LIKE '%" + txtCaseNumber.Text + "%'"
其中标识符是BoundField中的DataField,在这种情况下一切正常。 但是,当我想从名称与TempateField中的Fininish相同的列中选择适当的行时,我不知道该怎么做。 TemplateField的Exaple看起来像这样:
<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 ...在这个控件里面我创建了公共属性Filter,我想分配字符串值,它将选择合适的列并对它们进行排序。
Filter = "[???] = '" + ddlCaseStatus.SelectedValue + "'";
然后在gridView中使用它:
FilterExpression = ucCaseFilter.Filter;
我不知道如何通过“状态”列来获取列名称或其他方法。
如果我不理解之前的答案,并且它引用了正确的解决方案
答案 0 :(得分:6)
将<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();
}
}