簡體   English   中英

在asp.net C#中按行號對GridView進行排序?

[英]Sorting GridView by row number in asp.net C#?

我在ASP.NET(1,2,3,4,...)中有一個帶有行號(Container.DataItemIndex)列的GridView

我通過以下代碼在GridView中添加了它:

<asp:TemplateField HeaderText="#" SortExpression="#">
     <ItemTemplate>
          <%# Container.DataItemIndex + 1 %>
     </ItemTemplate>
</asp:TemplateField>

我想按此列對GridView進行排序。
我的意思是

ASC : 1,2,3,4, ...
DESC : n,n-1, ... , 4,3,2,1

我該怎么做 ?

編輯:
我是通過http://msdn.microsoft.com/zh-CN/library/system.web.ui.webcontrols.gridview.sorting.aspx來完成的,但是它對#列的排序方式類似於1,11,12,13,...,2,21,22,...
我想對#列1,2,3,...,11,12,13,...進行排序

(聲明式起初比較容易,但是也學習編程方式也很不錯)

聽起來像是按字符串排序,這行得通嗎?

<ItemTemplate> 
    <%# Convert.ToInt32(Container.DataItemIndex + 1) %> 
</ItemTemplate>

我使用以下方法解決了我的問題:

HTML:

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" AllowSorting="true"
        EmptyDataText="داده ای برای نمایش وجود ندارد" Width="100%" OnPageIndexChanging="GridView1_PageIndexChanging"
        OnSelectedIndexChanging="GridView1_SelectedIndexChanging" CssClass="GridViewStyle"
        OnSorting="GridView1_Sorting">
        <FooterStyle CssClass="GridViewFooterStyle" />
        <RowStyle CssClass="GridViewRowStyle" />
        <SelectedRowStyle CssClass="GridViewSelectedRowStyle" />
        <PagerStyle CssClass="GridViewPagerStyle" />
        <AlternatingRowStyle CssClass="GridViewAlternatingRowStyle" />
        <HeaderStyle CssClass="GridViewHeaderStyle" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:ImageButton runat="server" ID="btnDelete" CommandName="cDelete" ImageUrl="~/Pages/images/DeleteIcon.png"
                        OnCommand="OnDelete" CommandArgument='<%# Bind("GridViewDefinitionID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField SelectText="ویرایش" ShowSelectButton="True" ButtonType="Image"
                SelectImageUrl="~/Pages/images/EditIcon.gif" EditImageUrl="~/Pages/images/EditIcon.gif">
            </asp:CommandField>
            <asp:TemplateField HeaderText="TransactionKey" SortExpression="TransactionKey">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxGridViewTransactionKey" runat="server" Text='<%# Bind("GridViewTransactionKey") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewTransactionKey" runat="server" Text='<%# Bind("GridViewTransactionKey") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="TerminalID" SortExpression="TerminalID">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxGridViewTerminalID" runat="server" Text='<%# Bind("GridViewTerminalID") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewTerminalID" runat="server" Text='<%# Bind("GridViewTerminalID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="MerchantID" SortExpression="MerchantID">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxGridViewMerchantID" runat="server" Text='<%# Bind("GridViewMerchantID") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewMerchantID" runat="server" Text='<%# Bind("GridViewMerchantID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="شماره حساب" SortExpression="شماره حساب">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxGridViewBankAccount" runat="server" Text='<%# Bind("GridViewBankAccount") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewBankAccount" runat="server" Text='<%# Bind("GridViewBankAccount") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="شعبه" SortExpression="شعبه">
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewBankBranch" runat="server" Text='<%# Bind("GridViewBankBranch") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="نام بانک" SortExpression="نام بانک">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBoxGridViewBankName" runat="server" Text='<%# Bind("GridViewBankName") %>'
                        Style="direction: rtl;"></asp:TextBox>
                    <asp:HiddenField ID="HiddenFieldID" runat="server" Value='<%# Bind("GridViewDefinitionID") %>' />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewBankName" runat="server" Text='<%# Bind("GridViewBankName") %>'></asp:Label>
                    <asp:HiddenField ID="HiddenFieldID" runat="server" Value='<%# Bind("GridViewDefinitionID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="#" SortExpression="#">
                <ItemTemplate>
                    <asp:Label ID="LabelGridViewRowNumber" runat="server" Text='<%# Bind("GridViewRowNumber") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

C# :

DataView SortGridView()
{
    BankTransactionsDataSet1 dataSet = new BankTransactionsDataSet1();
    BankTransactionsDataClassesDataContext dbc = new BankTransactionsDataClassesDataContext();
    var Definitions = dbc.Definitions;

    if (Definitions.Count() <= 0) return null;
    int i = 0;
    foreach (var Definition in Definitions)
    {
        i++;
        string bankName = dbc.Banks.Where(c => c.BankID == Definition.BankID).First().BankName;
        string bankBranch = dbc.Banks.Where(c => c.BankID == Definition.BankID).First().BankBranch;
        dataSet.DataTableBanks.Rows.Add(bankName, Definition.BankAccount,
            Definition.MerchantID, Definition.TerminalID,
            Definition.TransactionKey, Definition.DefinitionID,
            i.ToString(), bankBranch);
    }

    string SortExpression = (ViewState["SortExpression"] as string) == null ? "GridViewBankName" : ViewState["SortExpression"] as string;
    string lastDirection = (ViewState["SortDirection"] as string) == null ? "ASC" : ViewState["SortDirection"] as string;

    DataView newBankDataTable = new DataView();
    switch (SortExpression)
    {
        case "GridViewTransactionKey":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => q.GridViewTransactionKey).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => q.GridViewTransactionKey).AsDataView();
            break;

        case "GridViewTerminalID":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => q.GridViewTerminalID).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => q.GridViewTerminalID).AsDataView();
            break;

        case "GridViewMerchantID":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => q.GridViewMerchantID).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => q.GridViewMerchantID).AsDataView();
            break;

        case "GridViewBankAccount":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => q.GridViewBankAccount).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => q.GridViewBankAccount).AsDataView();
            break;

        case "GridViewBankName":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => q.GridViewBankName).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => q.GridViewBankName).AsDataView();
            break;

        case "GridViewRowNumber":
            if (lastDirection == "ASC")
                newBankDataTable = dataSet.DataTableBanks.OrderBy(q => int.Parse(q.GridViewRowNumber)).AsDataView();
            else
                newBankDataTable = dataSet.DataTableBanks.OrderByDescending(q => int.Parse(q.GridViewRowNumber)).AsDataView();

            break;

        default:
            dataSet.DataTableBanks.DefaultView.Sort = SortExpression + " " + lastDirection;
            break;
    }

    return newBankDataTable;
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    try
    {
        switch (e.SortExpression)
        {
            case "TransactionKey":
                ViewState["SortExpression"] = "GridViewTransactionKey";
                break;

            case "TerminalID":
                ViewState["SortExpression"] = "GridViewTerminalID";
                break;

            case "MerchantID":
                ViewState["SortExpression"] = "GridViewMerchantID";
                break;

            case "شماره حساب":
                ViewState["SortExpression"] = "GridViewBankAccount";
                break;

            case "نام بانک":
                ViewState["SortExpression"] = "GridViewBankName";
                break;

            case "#":
                ViewState["SortExpression"] = "GridViewRowNumber";
                break;

            default:
                break;
        }
        string lastDirection = ViewState["SortDirection"] as string;
        string sortDirection = "DESC";
        if ((lastDirection != null) && (lastDirection == "DESC")) sortDirection = "ASC";
        ViewState["SortDirection"] = sortDirection;

        GridView1.DataSource = SortGridView();
        GridView1.DataBind();
    }
    catch (Exception ex)
    {
        LabelResult.Text = ex.Message;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM