使用SPDataSource对asp.net GridView进行排序

时间:2013-04-16 01:29:32

标签: asp.net sharepoint sorting gridview

我想通过单击列标题来对GridView进行排序。到目前为止,我宣布了一个SPDataSource

<SharePoint:SPDataSource
                runat="server"
                ID="SPdsInventarGrid"
                DataSourceMode="List"
                UseInternalName="true"
                Scope="Recursive"
                SelectCommand="<View><Query><Where><Or><Neq><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x00210' /><Value Type='Text'>Open</Value></Neq><IsNull><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x0028' /></IsNull></Or></Where></Query><ViewFields><FieldRef Name='Title'/><FieldRef Name='ID'/><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x0028'/><FieldRef Name='EBS_x002e_CN_x002e_Inventar_x00210'/><FieldRef </ViewFields></View>">
                <SelectParameters>
                    <asp:Parameter Name="ListName" DefaultValue="Inventar" />
                </SelectParameters>
            </SharePoint:SPDataSource>

然后我根据数据源

创建了我的网格
    <asp:GridView Visible="true" Width="100%"
                ID="gvInventar"
                AutoGenerateColumns="false" runat="server" CellPadding="2" AllowPaging="false" AllowSorting="true" OnSorted="gvInventar_Sorted" OnSorting="gvInventar_Sorting" GridLines="None" DataSourceID="SPdsInventarGrid" OnRowCommand="gvInventar_RowCommand">
                <Columns>
                    <asp:CommandField ButtonType="Image" ShowEditButton="true" EditImageUrl="/_layouts/images/edit.gif" UpdateImageUrl="/_layouts/images/save.gif" CancelImageUrl="/_layouts/images/delete.gif" />

                    <asp:TemplateField HeaderText="ID">
                        <ItemTemplate>
                            <asp:Label Text='<%# Bind("ID") %>' runat="server" ID="lblIdProduct"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Title" >
                        <ItemTemplate>
                            <asp:Label Text='<%# Bind("Title") %>' runat="server" ID="lblTitleProduct" ></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Product" SortExpression="Product">
                        <ItemTemplate>
                            <asp:Label Text='<%# Bind("EBS_x002e_CN_x002e_Inventar_x0028") %>' runat="server" ID="lblProduct" "></asp:Label>
                        </ItemTemplate>

                </Columns>
    </asp:GridView>

现在,我有这个函数,我想把当前的Query作为一个字符串,并在<OrderBy>之前添加<Query>(我的字段),但是我得到一个错误,说已经声明了DataSource (这是真的,因为我想在asp中声明)

protected void gvInventar_Sorting(object sender, GridViewSortEventArgs e)
    {
        SPQuery q = new SPQuery();
        q.Query = SPdsInventarGrid.SelectCommand;
        switch (e.SortExpression)
        {
            case "Product":
                if (e.SortDirection == SortDirection.Ascending)
                {
                    gvInventar.DataSource = q.Query;
                    gvInventar.DataBind();
                }
                else
                {
                }
               break;
        }
    }

即使它没有以这种方式工作,我也不认为修改Query是解决方案。 有谁可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:0)

您不需要编写任何自定义代码来通过单击列标题对gridview进行排序,您只需将SortExpression的{​​{1}}属性设置为所需的列名,例如:

TemplateField

现在您可以对所有3列进行排序:

enter image description here