2014-06-25 164 views
2

我有一个从数据库加载数据的gridview。数据首次显示在gridview中,按日期时间排序。在该gridview的一列上,我想允许排序,例如在main_post列上。我曾试过这个,但是当我点击列标题时,gridview仍然没有排序。在asp.net中排序gridview列

这是我的GridView前端代码:

<asp:DataGrid ID="Datagrid1" runat="server" 
    AllowPaging="True" 
    AllowSorting="True" 
    OnSorting="ComponentGridView_Sorting"> 
    <Columns> 
     <asp:BoundColumn DataField="main_post" HeaderText="Header Post ID" 
      SortExpression="ComponentGridView_Sorting" /> 
    </Columns> 
</asp:DataGrid> 

我的后端代码:

protected void loadData() 
{ 
    DataTable dtTemp; 
    dtTemp = objDBInterface.getResults(strSQL); 
    Datagrid1.DataSource = dtTemp; 
    Datagrid1.DataBind(); 
    ViewState["dtbl"] = dtTemp; 
} 

protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     DataTable dataTable = ViewState["dtbl"] as DataTable; 
     if (dataTable != null) 
     { 
      DataView dataView = new DataView(dataTable); 
      dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection); 
      Datagrid1.DataSource = dataView; 
      Datagrid1.DataBind(); 
     } 
    } 
    private string ConvertSortDirection(SortDirection sortDirection) 
    { 
     string newSortDirection = String.Empty; 
     switch (sortDirection) 
     { 
      case SortDirection.Ascending: 
       newSortDirection = "ASC"; 
       break; 
      case SortDirection.Descending: 
       newSortDirection = "DESC"; 
       break; 
     } 

     return newSortDirection; 
    } 

我没有任何错误,我不知道我的错误是,可能有人请帮我解决这个问题?

在此先感谢。

回答

2

我得到了解决。希望这能够帮助那些面临类似问题的人。在.aspx页面中需要改变:

OnSorting="ComponentGridView_Sorting"

onsortcommand="ComponentGridView_Sorting"

然后把这个代码在aspx.cs(后端代码):

protected void Datagrid1_SortCommand(object source, DataGridSortCommandEventArgs e) 
    { 
     string strSQL; 
     DataTable dt; 
     strSQL = "YOUR SELECT STATEMENT (SQL)"; 
     dt = strSQL; 
      { 
       string SortDir = string.Empty; 
       if (dir == SortDirection.Ascending) 
       { 
        dir = SortDirection.Descending; 
        SortDir = "Desc"; 
       } 
       else 
       { 
        dir = SortDirection.Ascending; 
        SortDir = "Asc"; 
       } 
       DataView sortedView = new DataView(dt); 
       sortedView.Sort = e.SortExpression + " " + SortDir; 
       Datagrid1.DataSource = sortedView; 
       Datagrid1.DataBind(); 
      } 
    } 

    protected SortDirection dir 
    { 
     get 
     { 
      if (ViewState["dirState"] == null) 
      { 
       ViewState["dirState"] = SortDirection.Ascending; 
      } 
      return (SortDirection)ViewState["dirState"]; 
     } 
     set 
     { 
      ViewState["dirState"] = value; 
     } 
    } 
0

你必须使用这些代码,你已经错过了排序表达式

<asp:DataGrid ID="Datagrid1" runat="server" AllowPaging="True" AllowSorting="True" OnSorting="ComponentGridView_Sorting"> 
    <Columns> 
<asp:BoundColumn DataField="main_post" HeaderText="Header Post ID" SortExpression="main_post" /> 
</Columns> 
    </asp:DataGrid> 

希望这将帮助你..

0
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="empid" DataSourceID="SqlDataSource1" EnableModelValidation="True" ForeColor="#333333" GridLines="None"> 
+4

您可以提供关于你的答案一些解释。 – guisantogui

0

简单,将Allowsorting属性设置为true,并在GridView中添加排序事件。

<asp:GridView ID="GridView1" runat="server" AllowSorting="true" 
 
     OnSorting="GridView1_Sorting"> 
 
</asp:GridView>

现在添加事件OnSorting在.cs文件

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
 
{ 
 
    SetSortDirection(SortDireaction); 
 
    if (dataTable != null) 
 
    { 
 
     dataTable.DefaultView.Sort = e.SortExpression + " " +_sortDirection; 
 
     GridView1.DataSource = dataTable; 
 
     GridView1.DataBind(); 
 
     SortDireaction = _sortDirection; 
 
    } 
 
} 
 
protected void SetSortDirection(string sortDirection) 
 
{ 
 
    if (sortDirection == "ASC") 
 
    { 
 
     _sortDirection = "DESC"; 
 
    } 
 
    else 
 
    { 
 
     _sortDirection = "ASC"; 
 
    } 
 
}

0

不要把紧张开发商这真是太容易了按照我的步骤

步骤1创建的GridView

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowPaging="true" class="w3-table-all" 
     OnPageIndexChanging="OnPageIndexChanging" PageSize="20" > 
     <Columns> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="250px" DataField="sn_no" HeaderText="ID" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="name" HeaderText="Name" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="mo" HeaderText="Mobile" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="email" HeaderText="Email Id" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="loc" HeaderText="Location" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="date" HeaderText="Date" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="day2" HeaderText="Day" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="date" HeaderText="Date" /> 
      <asp:BoundField HeaderStyle-CssClass="w3-blue" ItemStyle-CssClass="w3-hover-green" ItemStyle-Width="500px" DataField="time" HeaderText="Time" /> 
     </Columns> 

    </asp:GridView> 

步骤2后藤* .aspx.cs文件,并写入

一个)。降序

cmd = new MySqlCommand("SELECT * FROM appointment ORDER BY sn_no DESC", con); 

b)。对于升序

cmd = new MySqlCommand("SELECT * FROM appointment ORDER BY sn_no ASC", con); 

感谢爱#Vaibhav亚达夫 Vaibhav的设计 http://vaibhavdesigns.org 更多...

+0

**评论人** –