近期由于项目中多处需要用到可固定表头,表体可滚动的DATAGRID。
在网上查阅了一些资料大都是和没封装好的DATAGRID,在实际项目中应用比较繁琐。
在参考:
http://www.datawebcontrols.com/faqs/CustomizingAppearance/ScrollableDataGridWithFixedHeader.shtml
的基础上封装了一个无分页的可固定表头,表体可移动的DATAGRID组件,希望可以为需要此简单功能的同仁提供一点帮助。
![None.gif](/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
1
using
System;
2
using
System.Web.UI;
3
using
System.Web.UI.WebControls;
4
using
System.ComponentModel;
5
using
System.Diagnostics;
6
using
System.IO;
7
using
System.Text;
8
using
System.Drawing;
9![None.gif](/Images/OutliningIndicators/None.gif)
10![None.gif](/Images/OutliningIndicators/None.gif)
11
namespace
CustomControls
12![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
13![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
14
/// CustomDataGrid 的摘要说明。
15
/// Function:Fixed Header and Scrollable DataGrid control
16
/// </summary>
17
public class CustomDataGrid:System.Web.UI.WebControls.DataGrid
18![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
19
public CustomDataGrid():base()
20![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
21
//
22
// TODO: 在此处添加构造函数逻辑
23
//
24
this.HeaderStyle.BackColor=System.Drawing.ColorTranslator.FromHtml("#D8C8A8");
25
this.Style.Add("font-size","10pt");
26
this.BorderWidth=0;
27
this.CellSpacing=1;
28
this.CellPadding=3;
29
this.AlternatingItemStyle.BackColor=System.Drawing.ColorTranslator.FromHtml("#FFFFFF");
30
this.ItemStyle.BackColor=System.Drawing.ColorTranslator.FromHtml("#DDDDDD");
31![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
32
this.AllowPaging=true;
33
this.AllowSorting=true;
34
this.AllowCustomPaging=false;
35
this.AutoGenerateColumns=false;
36
this.PagerStyle.Visible=false;
37
HeaderStyle.Wrap = false;
38
ItemStyle.Wrap = false;
39
this.FooterStyle.Wrap = false;
40
this.HeaderStyle.Height=18;
41
ItemStyle.Height = 15;
42
//header style
43
this.HeaderStyle.CssClass = "ms-formlabel DataGridFixedHeader";
44
}
45
protected override void Render(HtmlTextWriter output)
46![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
47
//Actual length
48
string actwidth = (this.Width.Type==UnitType.Pixel)?(Width.Value+20)+"px":(Width.Value-5)+"%";
49
output.WriteBeginTag("div");
50
output.WriteAttribute("id",ID + "_div");
51
output.WriteAttribute("style",
52
"HEIGHT: " + Height + ";" +
53
"WIDTH: " + actwidth+";"+
54
"OVERFLOW: auto;"+
55
"TABLE-LAYOUT:fixed;"
56
);
57
output.Write(HtmlTextWriter.TagRightChar);
58
base.Render(output);
59
output.WriteEndTag("div");
60
//add script for adjust Height
61
string adjustHeightScript = @"<script>try{"+this.ID+".style.height=\"\"}catch(e){}</script>";
62
Page.RegisterStartupScript("dummyKey" + this.ID, adjustHeightScript);
63
}
64![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
65
protected override void OnInit(EventArgs e)
66![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
67
//default height and wedth
68
if (0 == Width.Value) Width = new Unit("300px");
69
if (0 == Height.Value) Height = new Unit("150px");
70
base.OnInit (e);
71
}
72![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
73
protected override void OnItemCreated(DataGridItemEventArgs e)
74![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
75
for(int i=0;i<e.Item.Cells.Count;i++)
76![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
77
//
78
e.Item.Cells[i].Attributes.Add("nowrap","nowrap");
79
}
80
if(e.Item.ItemType == ListItemType.AlternatingItem ||e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.SelectedItem)
81![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
82![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
83
e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor='#fff7ce';";
84
if(e.Item.ItemType==ListItemType.Item)
85
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#dedfde';";
86
else
87
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor='#ffffff';";
88![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
89
}
90
}
91![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
92![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
93
/// The deletion confirms prompts
94
/// </summary>
95
/// <param name="e"></param>
96
protected override void OnItemDataBound(DataGridItemEventArgs e)
97![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
98
foreach(TableCell tc in e.Item.Cells)
99![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
100
if(tc.HasControls())
101![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
102
if(tc.Controls[0].GetType().Name=="DataGridLinkButton")
103![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
104
LinkButton lb=(LinkButton)tc.Controls[0];
105
if(lb.CommandName=="Delete")
106
lb.Attributes["onclick"]="javascript:if(!confirm('are you sue?'))return false;";
107
}
108
}
109
}
110
111
base.OnItemDataBound(e);
112
}
113
}
114![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
115
}
116![None.gif](/Images/OutliningIndicators/None.gif)
117![None.gif](/Images/OutliningIndicators/None.gif)
118
![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![None.gif](/Images/OutliningIndicators/None.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
13
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
14
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
15
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
16
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
18
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
19
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
20
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
21
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
22
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
23
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
24
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
25
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
26
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
27
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
28
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
29
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
30
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
31
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
32
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
33
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
34
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
35
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
36
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
37
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
38
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
39
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
40
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
41
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
42
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
43
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
44
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
45
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
46
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
47
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
48
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
49
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
50
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
51
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
52
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
53
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
54
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
55
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
56
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
57
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
58
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
59
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
60
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
61
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
62
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
63
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
65
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
66
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
67
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
68
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
69
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
70
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
71
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
73
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
74
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
75
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
76
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
77
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
78
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
79
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
80
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
81
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
82
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
83
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
84
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
85
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
86
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
87
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
88
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
89
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
91
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
92
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
93
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
94
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
95
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
96
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
97
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
98
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
99
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
100
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
101
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
102
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
103
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
104
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
105
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
106
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
107
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
108
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
109
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
110
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
111
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
112
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
113
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
114
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
115
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
116
![None.gif](/Images/OutliningIndicators/None.gif)
117
![None.gif](/Images/OutliningIndicators/None.gif)
118
![None.gif](/Images/OutliningIndicators/None.gif)
功能比较简单,基本功能在项目中已测试。
希望有发现BUG的给予告知,谢谢。