Gridview 多重表头 (二)

多重表头之排序

这是个有点忧桑的故事。。。Cynthia告诉我,研究一个问题,我们不可能有超过一天的时间。。。

结果好好几天过去鸟~~还没有完成。。。

由于不再使用Gridview自带的表头行,于是无法绑定gridview自带排序方法。只能根据点击列名做不同处理。

我的思路是酱滴,将点击的列名存在一个hiddenfield里,排序时候根据hiddenfield里存储的值作为升/降序的依据。

好丢人的说,第一次的时候存在了label里,每次回传都被label默认值覆盖,后来才发现,不是所有控件都叫Hidden field...

ASPX

 1 <script language="javascript" type="text/javascript">
 2     function test(o)
 3     {
 4         document.getElementById("Label1").innerText = o;
 5         document.getElementById("LinkButton1").click();
 6     }
 7
 8 </script>
 9                                  ....
10
11       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"  AllowSorting="true"
12             onrowcreated="GridView1_RowCreated">
13           <Columns>
14               <asp:BoundField DataField="StoreId" HeaderText="Store Id" SortExpression="StoreId" />
15               <asp:BoundField DataField="Requeseter" HeaderText="Requester" SortExpression="Requeseter" />
16               <asp:BoundField DataField="EmployeeId" HeaderText="EmployeeId"  SortExpression="EmployeeId"/>
17               <asp:BoundField DataField="StoreId" HeaderText="StoreId2" SortExpression="StoreId"  />
18           </Columns>
19     </asp:GridView>
20
21         <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click"
22             ClientIDMode="Static">LinkButton</asp:LinkButton>
23          <asp:HiddenField ID="Label1" runat="server" Value=""/>

CS

  1         protected void Page_Load(object sender, EventArgs e)
  2         {
  3             if (!IsPostBack)
  4             {
  5                 List<Mix> list = new List<Mix>();
  6                 int i = 1000;
  7                 list.AddRange(new List<Mix> { new Mix { StoreId = 1, Requeseter = "A", EmployeeId = i + 3 }, new Mix { StoreId = 3, Requeseter = "A", EmployeeId = i + 2 }, new Mix { StoreId = 2, Requeseter = "A", EmployeeId = i + 4 }, new Mix { StoreId = 4, Requeseter = "B", EmployeeId = i + 3 } });
  8                 ViewState["lst"] = list;
  9                 GridView1.DataSource = list;
 10                 GridView1.DataBind();
 11                 ViewState["i"] = 1;
 12             }
 13             this.LinkButton1.Style.Add("display", "none");
 14         }
 15
 16         protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
 17         {
 18             switch (e.Row.RowType)
 19             {
 20                 case DataControlRowType.Header:
 21
 22                     TableCellCollection tcHeader = e.Row.Cells;
 23                     tcHeader.Clear();
 24                     //Associate
 25                     tcHeader.Add(new TableHeaderCell());
 26                     tcHeader[0].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 27                     tcHeader[0].ForeColor = System.Drawing.Color.White;
 28                     tcHeader[0].BorderColor = System.Drawing.Color.LightGray;
 29                     tcHeader[0].HorizontalAlign = HorizontalAlign.Center;
 30                     tcHeader[0].Attributes.Add("rowspan", "2");
 31                     tcHeader[0].Text = "<br><a  id=‘Associate‘ href=\"#\" onclick=‘test(this.id)‘>Associate</a>";
 32                     //   ClientScriptManager.RegisterForEventValidation();
 33                     //SecurityLevel
 34                     tcHeader.Add(new TableHeaderCell());
 35                     tcHeader[1].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 36                     tcHeader[1].ForeColor = System.Drawing.Color.White;
 37                     tcHeader[1].BorderColor = System.Drawing.Color.LightGray;
 38                     tcHeader[1].HorizontalAlign = HorizontalAlign.Center;
 39                     tcHeader[1].Attributes.Add("colspan", "3");
 40                     tcHeader[1].Text = "<p>SecurityLevel</p></th></tr><tr>";
 41
 42                     //2Line: Default Level
 43                     tcHeader.Add(new TableHeaderCell());
 44                     tcHeader[2].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 45                     tcHeader[2].ForeColor = System.Drawing.Color.White;
 46                     tcHeader[2].BorderColor = System.Drawing.Color.LightGray;
 47                     tcHeader[2].HorizontalAlign = HorizontalAlign.Center;
 48                     tcHeader[2].Text = "<a  id=‘jobcodedefault‘ href=\"#\" onclick=‘test(this.id)‘>Job Code Default</a>";
 49                     //tcHeader[2].Text = "<p>Job Code Default</p>";
 50
 51                     //2Line: Current Level
 52                     tcHeader.Add(new TableHeaderCell());
 53                     tcHeader[3].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 54                     tcHeader[3].ForeColor = System.Drawing.Color.White;
 55                     tcHeader[3].BorderColor = System.Drawing.Color.LightGray;
 56                     tcHeader[3].HorizontalAlign = HorizontalAlign.Center;
 57                     //<a  id=‘jobcodedefault‘ href=\"#\" onclick=‘test(this.id)‘>Job Code Default</a>
 58                     tcHeader[3].Text = "<a  id=‘current‘ href=\"#\" onclick=‘test(this.id)‘>Current</a>";
 59
 60                     //tcHeader[3].Text = "<label style=‘width:99%; text-align:center; vertical-align:middle; color:White; font-weight:bold ‘>Current</label>";
 61                     tcHeader.Add(new TableHeaderCell());
 62
 63                     //2Line: Requested Level
 64                     tcHeader[4].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 65                     tcHeader[4].ForeColor = System.Drawing.Color.White;
 66                     tcHeader[4].BorderColor = System.Drawing.Color.LightGray;
 67                     tcHeader[4].HorizontalAlign = HorizontalAlign.Center;
 68                     tcHeader[4].Style.Add("BorderColor", "White");
 69                     //      tcHeader[4].Text = "<label style=‘width:99%; text-align:center; vertical-align:middle; color:White; font-weight:bold ‘>Requested</label></tr>";
 70                     tcHeader[4].Text = "<a  id=‘requester‘ href=\"#\" onclick=‘test(this.id)‘>Requester</a></tr>";
 71
 72                     break;
 73             }
 74
 75
 76         }
 77
 78
 79
 80         protected void LinkButton1_Click(object sender, EventArgs e)
 81         {
 82             List<Mix> list = new List<Mix>();
 83             List<Mix> listSorted = new List<Mix>();
 84
 85             list = (List<Mix>)ViewState["lst"];
 86
 87             switch (Label1.Value)
 88             {
 89                 case "Associate":
 90                     {
 91                         int j = (int)ViewState["i"];
 92
 93                         if ((j++) % 2 == 0)
 94                         {
 95                             var historydesc = from c in list orderby c.StoreId descending select c;
 96                             foreach (var x in historydesc)
 97                             {
 98                                 listSorted.Add(x);
 99                             }
100                         }
101                         else
102                         {
103                             var historyasc = from c in list orderby c.StoreId ascending select c;
104                             foreach (var x in historyasc)
105                             {
106                                 listSorted.Add(x);
107                             }
108                         }
109                         ViewState["i"] = j;
110
111                         break;
112                     }
113                 case "jobcodedefault":
114                     {
115                         int j = (int)ViewState["i"];
116
117                         if ((j++) % 2 == 0)
118                         {
119                             var historydesc= from c in list orderby c.Requeseter descending select c;
120                             foreach (var x in historydesc)
121                             {
122                                 listSorted.Add(x);
123                             }
124                         }
125                         else
126                         {
127                             var historyasc = from c in list orderby c.Requeseter ascending select c;
128                             foreach (var x in historyasc)
129                             {
130                                 listSorted.Add(x);
131                             }
132                         }
133                         ViewState["i"] = j;
134
135                         break;
136                     }
137                 case "current":
138                     {
139                         int j = (int)ViewState["i"];
140
141                         if ((j++) % 2 == 0)
142                         {
143                             var historydesc = from c in list orderby c.EmployeeId descending select c;
144                             foreach (var x in historydesc)
145                             {
146                                 listSorted.Add(x);
147                             }
148                         }
149                         else
150                         {
151                             var historyasc = from c in list orderby c.EmployeeId ascending select c;
152                             foreach (var x in historyasc)
153                             {
154                                 listSorted.Add(x);
155                             }
156                         }
157                         ViewState["i"] = j;
158
159                         break;
160
161                     }
162                 case "requester":
163                     {
164                         int j = (int)ViewState["i"];
165
166                         if ((j++) % 2 == 0)
167                         {
168                             var historydesc = from c in list orderby c.StoreId descending select c;
169                             foreach (var x in historydesc)
170                             {
171                                 listSorted.Add(x);
172                             }
173                         }
174                         else
175                         {
176                             var historyasc = from c in list orderby c.StoreId ascending select c;
177                             foreach (var x in historyasc)
178                             {
179                                 listSorted.Add(x);
180                             }
181                         }
182                         ViewState["i"] = j;
183
184                         break;
185
186                     }
187             }
188
189
190             this.GridView1.DataSource = listSorted;
191             this.GridView1.DataBind();
192         }

就算是简单的实现了吧,直到Cynthia告诉我可以酱。

lkbAssociate.Click += new EventHandler(grdHistorySort);

以Associate列为栗子。

1         //flag for asc and desc
2         private bool AssociateAsc
3         {
4             get { return (ViewState["AssociateAsc"] == null) ? true : (bool)ViewState["AssociateAsc"]; }
5             set { ViewState["AssociateAsc"] = value; }
6         }

 1        tcHeader.Add(new TableHeaderCell());
 2                         tcHeader[1].BackColor = System.Drawing.Color.FromArgb(99, 74, 141);
 3                         tcHeader[1].ForeColor = System.Drawing.Color.White;
 4                         tcHeader[1].BorderColor = System.Drawing.Color.LightGray;
 5                         tcHeader[1].HorizontalAlign = HorizontalAlign.Center;
 6                         tcHeader[1].Attributes.Add("rowspan", "2");
 7                         LinkButton lkbAssociate = new LinkButton();
 8                         lkbAssociate.Style.Add("text-align", "center");
 9                         lkbAssociate.Style.Add("color", "white");
10                         lkbAssociate.ID = "lkbAssociate";
11                         lkbAssociate.Text = "Associate (EID)";
12                         lkbAssociate.Click += new EventHandler(grdHistorySort);
13                         tcHeader[1].Controls.Add(lkbAssociate);

 1         protected void grdHistorySort(object sender, EventArgs e)
 2         {
 3             List<PMSecRequestHistoryInfo> originalList = new List<PMSecRequestHistoryInfo>();
 4             List<PMSecRequestHistoryInfo> sortedList = new List<PMSecRequestHistoryInfo>();
 5
 6             originalList = (List<PMSecRequestHistoryInfo>)ViewState["InitHistoryTabList"];
 7             LinkButton linkButonClicked = sender as LinkButton;
 8
 9             switch (linkButonClicked.ID)
10             {
11
12                 case "lkbAssociate":
13                     {
14                         if (ViewState["AssociateAsc"] == null || (bool)ViewState["AssociateAsc"])
15                         {
16                             var sorted = from c in originalList orderby c.DisplayName ascending select c;
17                             foreach (var info in sorted)
18                             {
19                                 sortedList.Add(info);
20                             }
21
22                             ViewState["AssociateAsc"] = false;
23                         }
24                         else
25                         {
26                             var sorted = from c in originalList orderby c.DisplayName descending select c;
27                             foreach (var info in sorted)
28                             {
29                                 sortedList.Add(info);
30                             }
31
32                             ViewState["AssociateAsc"] = true;
33                         }
34
35                     }
36                     break;
37                    ...

酱婶儿的,会不会简明扼要的多。。。Cynthiao(≧v≦)o~~好棒

唯一遗憾的是我不晓得如何为分隔的列添加控件同时添加格式。

这样两列,不能如法炮制。

第一次时候用了上次的写法,写了一个<a onclik></a>,发现页面要刷瞎我的双眼。。。

不闪的,才是健康的~

于是,拽了一个LinkButton,点了事件里的onclick想看看是个什么样子。ViewSource 发现是辣样一个东西,于是模仿了一个。

1                         tcHeader[12].Text = "<a id=‘LinkButton1‘ href=‘javascript:__doPostBack('LinkButton1','')‘ style=‘text-align:center;color:white‘ >Request</a></th></tr><tr>";

排序类似

 1         protected void LinkButton1_Click(object sender, EventArgs e)
 2         {
 3             List<PMSecRequestHistoryInfo> originalList = new List<PMSecRequestHistoryInfo>();
 4             List<PMSecRequestHistoryInfo> sortedList = new List<PMSecRequestHistoryInfo>();
 5
 6             originalList = (List<PMSecRequestHistoryInfo>)ViewState["InitHistoryTabList"];
 7
 8                 if (ViewState["RequestedLevelAsc"] == null || (bool)ViewState["RequestedLevelAsc"] == true)
 9                 {
10                     var sorted = from c in originalList orderby c.RequestedSecurityLevel ascending select c;
11                     foreach (var info in sorted)
12                     {
13                         sortedList.Add(info);
14                     }
15                     ViewState["RequestedLevelAsc"] = false;
16
17                 }
18                 else
19                 {
20                     var sorted = from c in originalList orderby c.RequestedSecurityLevel descending select c;
21                     foreach (var info in sorted)
22                     {
23                         sortedList.Add(info);
24                     }
25
26                     ViewState["RequestedLevelAsc"] = true;
27                 }
28
29
30             grdHistoryRequest.DataSource = sortedList;
31             grdHistoryRequest.DataBind();
32             ViewState["InitHistoryTabList"] = sortedList;
33
34
35         }

真正困惑我的是,如果我把页面上的LinkButton删掉,排序会 米!有!效!

百思不得姐,姐百思不得。。。。

时间: 2024-08-04 07:36:26

Gridview 多重表头 (二)的相关文章

GridView七十二绝技-大全(收藏版)(转至别人博客)

快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠标移到GridView某一行时改变该行的背景色方法一鼠标移到GridView某一行时改变该行的背景色方法二GridView实现删除时弹出确认对话框GridView实现自动编号GridView实现自定义时间货币等字符串格式GridView实现用“...”代替超长字符串GridView一般换行与强制换行

Silverlight多重表头实现

效果: 实现主要逻辑:通过动态拼接XML生成表头样式,绑定到列上. 主要是动态拼接XML时要仔细核对对应的占位行,具体可以看代码,注释很详细 两个类一个接口 NTree<T>:定义表头树形结构 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Collections.ObjectModel; 5 6 namespace SLDGHeader 7 { 8 /// <

原创:GridView组件(二):设计思路

GridView组件(二):设计思路 上期回顾:http://www.cnblogs.com/beiou/p/4113327.html 1.页面结构: gridview表格本生是可以只用一个table来渲染的. 但是为了结构清晰,便于维护,同时需实现table自行滚动且横向滚动colHead,分为四块: (1)colHead列头Panel (2)table数据Panel (3)page分页Panel (4)Drag拖拽线Panel覆盖在colHeadPanel与tablePanel之上. 2.对

GridView合并表头、多重表头(转)

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) { case DataControlRowType.Header: //第一行表头 TableCellCollection tcHeader = e.Row.Cells; tcHeader.Clear(); tcHeader.Add(new TableHeaderCell()); tcHeader[

ASP.NET—014:Gridview复合表头

继续看一个简单的ASP.NET应用.Gridview相信大家使用的比较多了,一般对多行数据进行展示和操作都会用到这个控件.而对于表头,也是很重要的一部分,它负责对数据进行分门别类的.而对于复合表头该如何展示呢?这个也挺简单的.显示复合表头,一般可以在后台通过代码实现.对于表头是由多个Header控件组成的,一般默认的一个Header显示一列.而对于复合表头就是将Header进行设置,让它占用多列或者多行.或者增加很多个Header,然后每个Header分别占用多列或者多行就可以了.来看一个复合的

gridview自定义表头

gridview为我们提供了丰富的接口,用于满足自定义需求. 通常asp:gridview会根据绑定的列Columns自动生成表头,展现在前台元素. 序号 类别 有时候需要复杂一些的表头. 序号 类别 数学 物理 化学 此时需要实现RowCreated事件 RowCreated提供了两个参数,重写表头. protected void RowCreated(object sender, GridViewRowEventArgs e) if (e.Row.RowType == DataControl

从零开始学android&lt;GridView网格视图.二十八.&gt;

GridView组件是以网格的形式显示所有的组件,例如:在制作相册的时候,所有的图片都会以相同大小显示在不同的格子之中,就可以依靠此组件完成,此组件的继承结构如下所示: java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.AdapterView<T extends android.widget.Adapter> ? android.widget.AbsListView ? android.

Gridview多表头制作

Rowpan----跨行 Colpan---跨列 TableCellCollection tcHeader = e.Row.Cells;-----申明一个表头 tcHeader.Add(newTableHeaderCell());------------新增一格单元 tcHeader[0].Attributes.Add("rowspan", "3");-----设置这格单元的格式  tcHeader[3].Text = "MES</th><

Gridview 复合表头

效果图: WEB页: <asp:GridView CssClass="grid" ID="grv" AutoGenerateColumns="False" runat="server"            EnableModelValidation="True" OnRowDataBound="grv_RowDataBound" Width="98%"