如何根据下拉列表选择对gridview进行排序

时间:2012-07-27 04:26:27

标签: c# asp.net visual-studio-2010

我需要根据下拉列表显示gridview:LastestTransactionFirst,EarlierTransactionFirst。所以基本上它是基于gridview中的日期的desc或asc。我可以知道我应该怎么做吗?

这是我的gridview选择代码。但我有一个下拉列表,需要根据下拉列表选择显示gridview。

    myConnection.ConnectionString = strConnectionString;
    SqlCommand cmd = new SqlCommand("SELECT thDate, thType, thAmountIn, thAmountOut from [Transaction] ORDER BY thDate, thType, thAmountIn, thAmountOut DESC", myConnection);
    myConnection.Open();
    SqlDataReader reader1 = cmd.ExecuteReader();
    GridView1.DataSource = reader1;
    GridView1.DataBind();

2 个答案:

答案 0 :(得分:1)

1)您可以在查询中使用Dynamic Order By,最好使用存储过程

2)快速&脏的方式是在你的下拉列表中传递selectedValue选择索引更改事件&重新绑定gridview,还在下拉列表中启用autopostback为true。像

这样的东西
protected void yourDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
   BindYourGridView(yourDropDown.SelectedValue);  
}

BindYourGridView(string sortParam)
{
   string orderBy=null;
   switch sortParam
   {
         case 0:
             orderBy= "ORDER BY thDate, thType, thAmountIn, thAmountOut DESC"
             break;
         case 1:
             orderBy= "ORDER BY thDate, thType, thAmountIn, thAmountOut"
             break;   
   }
  string yourQuery= "Select columns from table "+ orderBy;
  // Your data access code
  // Bind your gridview
}


//ASPX
   <asp:DropDownList ID="yourDropDownList" runat="server" AutoPostBack="True">
   <asp:ListItem Text="Recent First" Value="0" />
   <asp:ListItem Text="Earlier First" Value="1" />
   </asp:DropDownList>

答案 1 :(得分:0)

这是在gridview中排序的一个例子

DataView dvItems = new DataView((DataTable)ds.Tables["datatable1"]);

 if (ddl_itemsorderby.SelectedValue == "MenuGroup")
     dvItems.Sort = "Menu_Group, Item_Name ASC";
 else if (ddl_itemsorderby.SelectedValue == "Item")
     dvItems.Sort = "Item_Name, Menu_Group ASC";
 else if (ddl_itemsorderby.SelectedValue == "Rate")
     dvItems.Sort = "Item_rate, Item_Name ASC";
 else if (ddl_itemsorderby.SelectedValue == "Quantity")
     dvItems.Sort = "Item_Quantity, Item_Name ASC";

 gridview1.DataSource = dvItems;
 gridview1.DataBind();

此处Menu_Group,Item_name ...是绑定到gridview的数据表中的列名。

“Menu_Group,Item_Name ASC”这意味着将向Menu_Group提供更高的顺序优先级,并且将向Item_Name提供第二顺序优先级。   ASC是订单类型将升序

ddl_itemsorderby是将从中选择列顺序的下拉列表 dvitems是数据视图。

ASC是升序。

您必须创建一个包含数据表中数据的数据视图,然后对数据视图中的值进行排序,然后将数据视图绑定到gridview