【问题标题】:Sorting GridView by row number in asp.net C#?在asp.net C#中按行号对GridView进行排序?
【发布时间】:2010-09-18 19:31:22
【问题描述】:

我在 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/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx,但它对# 列的排序类似于1,11,12,13,...,2,21,22,...
我要排序#列1,2,3,...,11,12,13,...

【问题讨论】:

    标签: c# asp.net sorting gridview


    【解决方案1】:

    (一开始声明式更容易,但学习编程方式也很好)

    【讨论】:

    • 嗯,我知道,但是当我对 # 列进行排序时,它显示为 1、11、12、2、21、22,...我不想要它,我想要 1, 2,3, ... , 11,12, ...
    【解决方案2】:

    听起来好像是按字符串排序,这样行吗?

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

    【讨论】:

      【解决方案3】:

      我使用了以下方法解决了我的问题:

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

      【讨论】:

        猜你喜欢
        • 2010-09-17
        • 1970-01-01
        • 2016-10-15
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 2017-12-14
        • 2016-03-02
        • 1970-01-01
        相关资源
        最近更新 更多