DataGrid的模版列
这两天琢磨了一下DataGrid的模版列,发现功能挺强,不过还有挺多没摸透的。用代码来说话吧。
页面代码是这么写的:
1
<asp:DataGrid id="dgTasks" runat="server" AllowPaging="True" BorderStyle="Solid" PageSize="8"
2
ToolTip="点击链接处理该记录" BorderColor="#3168CD" AutoGenerateColumns="False" Width="1074">
3
<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>
4
<HeaderStyle HorizontalAlign="Center" Font-Bold="True" Font-Size="18px"></HeaderStyle>
5
<Columns>
6
<asp:TemplateColumn HeaderText="处理">
7
<ItemTemplate>
8
<asp:HyperLink runat="server" Text="处理" NavigateUrl='<%# "javascript:DoTask(" + DataBinder.Eval(Container.DataItem, "PI_id") + ");" %>'>
9
</asp:HyperLink>
10
</ItemTemplate>
11
</asp:TemplateColumn>
12
<asp:TemplateColumn HeaderText="ID">
13
<ItemTemplate>
14
<%# base.GetLabelColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),0) %>
15
</ItemTemplate>
16
</asp:TemplateColumn>
17
<asp:TemplateColumn HeaderText="描述">
18
<ItemTemplate>
19
<%# base.GetTAColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),2) %>
20
</ItemTemplate>
21
</asp:TemplateColumn>
22
<asp:TemplateColumn HeaderText="级别">
23
<ItemTemplate>
24
<%# base.GetValueColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),3,4) %>
25
</ItemTemplate>
26
</asp:TemplateColumn>
27
<asp:TemplateColumn HeaderText="时间">
28
<ItemTemplate>
29
<%# base.GetDTColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),5) %>
30
</ItemTemplate>
31
</asp:TemplateColumn>
32
</Columns>
33
<PagerStyle Visible="False" HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
34
</asp:DataGrid>
还需要在后代码中写对应的函数:![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
1
protected string GetTAColumn(long id,int colcount)
2
{//获取text area模版列的item
3
string item = "<textarea rows=\"3\" cols=\"16\" readonly=true title=";
4
item += dsDataSource.Tables[0].Rows[(int)id][colcount].ToString() + ">";
5
item += Server.HtmlEncode(dsDataSource.Tables[0].Rows[(int)id][colcount].ToString());
6
item += "</textarea>";
7
iTableWidth += 100;
8
return item;
9
}
10
protected string GetDTColumn(long id,int colcount)
11
{//获取日期时间模版列的item
12
string item = "<SPAN>";
13
if(dsDataSource.Tables[0].Rows[(int)id][colcount]!=DBNull.Value)
14
{
15
DateTime dt = (DateTime)dsDataSource.Tables[0].Rows[(int)id][colcount];
16
item += dt.ToShortDateString() + "<br/>" + dt.ToLongTimeString();
17
}
18
else
19
item += "    ";
20
item += "</SPAN>";
21
iTableWidth += 40;
22
return item;
23
}
24
protected string GetLabelColumn(long id,int colcount)
25
{//获取文本模版列的item
26
string item = "<SPAN>";
27
item += dsDataSource.Tables[0].Rows[(int)id][colcount].ToString();
28
item += "</SPAN>";
29
iTableWidth += 50;
30
return item;
31
}
32
protected string GetValueColumn(long id,int colcount,int coltypeid)
33
{//获取静态数据的对应文本模版列的item
34
string item = "<SPAN>";
35
DataRow[] foundRows = dsStaticData.Tables[0].Select("SD_typeid="+coltypeid.ToString());
36
for(int i=0;i<foundRows.Length;i++)
37
{
38
if(dsDataSource.Tables[0].Rows[(int)id][colcount].ToString()==foundRows[i]["SD_typevalue"].ToString())
39
item += foundRows[i]["SD_typetext"].ToString();
40
}
41
item += "</SPAN>";
42
iTableWidth += 50;
43
return item;
44
}
通过自定义的这些函数可以返回不同html控件。如GetDTColumn函数,就可以在日期和时间之间加个换行。![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
当然,在页面文件中调用自定义函数可以传入字段名,这样可以更直观的控制列。如果同时在后代码中修改SQL调用方式,变成灵活的读取配置或数据库的方式,那就可以不用每次都编译工程,只在页面文件中就可以随意添加、删除列了。