DataGrid双向排序以及给HeaderText加图标
DataGrid雙向排序以及給HeaderText加圖標
DataGrid默認情況下只支持單向排序,而且默認是升序(ASC)。能不能使之支持雙向排序并且給HeaderText加圖標呢?
?????? 下面的例子將演示如何給DataGrid動態添加sortexpression 和 sortdirection 屬性,并通過DataView使DataGird中的數據按照這兩個屬性排列。
??????? 假設在頁面上添加了一個ID=“showdata”的DataGrid。使用Northwind數據庫中的customers表來說明這個例子。
?????? 首先,我們必須知道:
??????? (1).數據源一定是Dataview,因為DataView提供了一種過濾和排序DataTable中數據的一種方式。
??????? (2).DataGrid的AllowSorting屬性要為True。
??????? (3).DataGrid的AutogenerateColumns屬性要為False
??????? (4).添加要綁定的字段到DataGrid,并設置Sortexpression屬性和數據庫中數據表中的字段名保持一致。
?? //在頁面第一次被加載時給DataGrid添加動態屬性sortexpression 和 sortdirection,
?? //給指定的字段的sortexpression 和 sortdirection 賦值,在加載時初始化DataGrid的排序字段和排序方式
??? protected void Page_Load(object sender, System.EventArgs e)
??? {
??????? if (!IsPostBack)
??????? {
??????????? if (showdata.Attributes["SortExpression"] == null)
??????????? {
??????????????? showdata.Attributes["SortExpression"] = "CustomerID";
??????????????? showdata.Attributes["SortDirection"] = "ASC";
??????????? }
??????????? BindGrid();
??????? }
??? }
?
??? //? 得到DataSet 和 DataView 對象。設置DataView 的sort 屬性為動態屬性sortexpression 和 sortdirection的連接字符串
??? private void BindGrid()
??? {
??????? SqlConnection conn = new SqlConnection("server=localhost;uid=sa;pwd=sa;database=Northwind");
??????? conn.Open();
??????? SqlDataAdapter cmd = new SqlDataAdapter("select * from customers", conn);
??????? DataSet ds = new DataSet();
??????? cmd.Fill(ds, "customers");
??????? DataView dv = new DataView(ds);
??????? string SortExpression = showdata.Attributes["SortExpression"];
??????? string SortDirection = showdata.Attributes["SortDirection"];
??????? dv.Sort = SortExpression + " " + SortDirection;
??????? this.showdata.DataSource = dv;
??????? this.showdata.DataBind();
??? }
?
?? //不要圖標的SortCommand事件
??? private void showdata_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
??? {
??????? string SortExpression = e.SortExpression.ToString();
??????? string SortDirection = "ASC";
??????? if (SortExpression == showdata.Attributes["SortExpression"])
??????? {
??????????? SortDirection = (showdata.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");
??????? }
??????? showdata.Attributes["SortExpression"] = SortExpression;
??????? showdata.Attributes["SortDirection"] = SortDirection;
??????? BindGrid();
??? }
?
??? //要圖標的SortCommand事件,當表頭被點擊時,觸發DataGrid的sortcommand事件,得到sortcommand事件傳遞過來的sortexpression屬性,并與datagrid的sortexpression屬性比較,再比較SortDirection……
??? protected void showdata_SortCommand(object source, DataGridSortCommandEventArgs e)
??? {
??????? string ImgDown = "<img border=0 src=" + Request.ApplicationPath + "/uparrow.gif>";
??????? string ImgUp = "<img border=0 src=" + Request.ApplicationPath + "/downarrow.gif>";
??????? string SortExpression = e.SortExpression.ToString();
??????? string SortDirection = "ASC";
??????? int colindex = -1;
??????? //清空之前的圖標
??????? for (int i = 0; i < showdata.Columns.Count; i++)
??????? {
??????????? showdata.Columns[i].HeaderText = (showdata.Columns[i].HeaderText).ToString().Replace(ImgDown, "");
??????????? showdata.Columns[i].HeaderText = (showdata.Columns[i].HeaderText).ToString().Replace(ImgUp, "");
??????? }
??????? //找到所點擊的HeaderText的索引號
??????? for (int i = 0; i < showdata.Columns.Count; i++)
??????? {
??????????? if (showdata.Columns[i].SortExpression == e.SortExpression)
??????????? {
??????????????? colindex = i;
??????????????? break;
??????????? }
??????? }
??????? if (SortExpression == showdata.Attributes["SortExpression"])
??????? {
??????????? SortDirection = (showdata.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");
??????? }
??????? showdata.Attributes["SortExpression"] = SortExpression;
??????? showdata.Attributes["SortDirection"] = SortDirection;
??????? if (showdata.Attributes["SortDirection"] == "ASC")
??????? {
??????????? showdata.Columns[colindex].HeaderText = showdata.Columns[colindex].HeaderText + ImgDown;
??????? }
??????? else
??????? {
??????????? showdata.Columns[colindex].HeaderText = showdata.Columns[colindex].HeaderText + ImgUp;
??????? }
??????? BindGrid();
??? }
?
轉載于:https://www.cnblogs.com/cjrxlf/archive/2011/03/02/1969360.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的DataGrid双向排序以及给HeaderText加图标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一些解密必备知识(2)- 基础篇03|解
- 下一篇: Firefox 插件:鲜味 del.ic