通过适当的列(GridField)对gridView进行排序

时间:2011-10-05 12:10:17

标签: asp.net gridview sqldatasource

我在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;

我不知道如何通过“状态”列来获取列名称或其他方法。

如果我不理解之前的答案,并且它引用了正确的解决方案

1 个答案:

答案 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();
    }   
}