1

列のヘッダーをクリックして 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>

<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;
        }
    }

このように機能していなくても、クエリを変更することが解決策になるとは思いません。誰かこの件で私を助けてくれませんか?

4

1 に答える 1

0

列ヘッダーをクリックしてグリッドビューを並べ替えるカスタム コードを記述する必要はありません。必要な列名にのSortExpressionプロパティを設定するだけです。TemplateField

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

これで、3 つの列すべてで並べ替えることができます。

ここに画像の説明を入力

于 2013-04-16T07:29:13.923 に答える