DataGrid的模版列

      这两天琢磨了一下DataGrid的模版列,发现功能挺强,不过还有挺多没摸透的。用代码来说话吧。
      页面代码是这么写的:

 1None.gif                        <asp:DataGrid id="dgTasks" runat="server" AllowPaging="True" BorderStyle="Solid" PageSize="8"
 2None.gif                            ToolTip="点击链接处理该记录" BorderColor="#3168CD" AutoGenerateColumns="False" Width="1074">
 3None.gif                            <AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>
 4None.gif                            <HeaderStyle HorizontalAlign="Center" Font-Bold="True" Font-Size="18px"></HeaderStyle>
 5None.gif                            <Columns>
 6None.gif                                <asp:TemplateColumn HeaderText="处理">
 7None.gif                                    <ItemTemplate>
 8None.gif                                        <asp:HyperLink runat="server" Text="处理" NavigateUrl='<%# "javascript:DoTask(" + DataBinder.Eval(Container.DataItem, "PI_id") + ");" %>'>
 9None.gif                                        </asp:HyperLink>
10None.gif                                    </ItemTemplate>
11None.gif                                </asp:TemplateColumn>
12None.gif                                <asp:TemplateColumn HeaderText="ID">
13None.gif                                    <ItemTemplate>
14None.gif                                        <%base.GetLabelColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),0%>
15None.gif                                    </ItemTemplate>
16None.gif                                </asp:TemplateColumn>
17None.gif                                <asp:TemplateColumn HeaderText="描述">
18None.gif                                    <ItemTemplate>
19None.gif                                        <%base.GetTAColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),2%>
20None.gif                                    </ItemTemplate>
21None.gif                                </asp:TemplateColumn>
22None.gif                                <asp:TemplateColumn HeaderText="级别">
23None.gif                                    <ItemTemplate>
24None.gif                                        <%base.GetValueColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),3,4%>
25None.gif                                    </ItemTemplate>
26None.gif                                </asp:TemplateColumn>
27None.gif                                <asp:TemplateColumn HeaderText="时间">
28None.gif                                    <ItemTemplate>
29None.gif                                        <%base.GetDTColumn((long)DataBinder.Eval(Container.DataItem, "PI_id"),5%>
30None.gif                                    </ItemTemplate>
31None.gif                                </asp:TemplateColumn>
32None.gif                            </Columns>
33None.gif                            <PagerStyle Visible="False" HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
34None.gif                        </asp:DataGrid>
      还需要在后代码中写对应的函数:
 1None.gif        protected string GetTAColumn(long id,int colcount)
 2ExpandedBlockStart.gifContractedBlock.gif        dot.gif{//获取text area模版列的item
 3InBlock.gif            string item = "<textarea rows=\"3\" cols=\"16\" readonly=true title=";
 4InBlock.gif            item += dsDataSource.Tables[0].Rows[(int)id][colcount].ToString() + ">";
 5InBlock.gif            item += Server.HtmlEncode(dsDataSource.Tables[0].Rows[(int)id][colcount].ToString());
 6InBlock.gif            item += "</textarea>";
 7InBlock.gif            iTableWidth += 100;
 8InBlock.gif            return item;
 9ExpandedBlockEnd.gif        }

10None.gif        protected string GetDTColumn(long id,int colcount)
11ExpandedBlockStart.gifContractedBlock.gif        dot.gif{//获取日期时间模版列的item
12InBlock.gif            string item = "<SPAN>";
13InBlock.gif            if(dsDataSource.Tables[0].Rows[(int)id][colcount]!=DBNull.Value)
14ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
15InBlock.gif                DateTime dt = (DateTime)dsDataSource.Tables[0].Rows[(int)id][colcount];
16InBlock.gif                item += dt.ToShortDateString() + "<br/>" + dt.ToLongTimeString();
17ExpandedSubBlockEnd.gif            }

18InBlock.gif            else
19InBlock.gif                item += "&nbsp&nbsp&nbsp&nbsp";
20InBlock.gif            item += "</SPAN>";
21InBlock.gif            iTableWidth += 40;
22InBlock.gif            return item;
23ExpandedBlockEnd.gif        }

24None.gif        protected string GetLabelColumn(long id,int colcount)
25ExpandedBlockStart.gifContractedBlock.gif        dot.gif{//获取文本模版列的item
26InBlock.gif            string item = "<SPAN>";
27InBlock.gif            item += dsDataSource.Tables[0].Rows[(int)id][colcount].ToString();
28InBlock.gif            item += "</SPAN>";
29InBlock.gif            iTableWidth += 50;
30InBlock.gif            return item;
31ExpandedBlockEnd.gif        }

32None.gif        protected string GetValueColumn(long id,int colcount,int coltypeid)
33ExpandedBlockStart.gifContractedBlock.gif        dot.gif{//获取静态数据的对应文本模版列的item
34InBlock.gif            string item = "<SPAN>";
35InBlock.gif            DataRow[] foundRows = dsStaticData.Tables[0].Select("SD_typeid="+coltypeid.ToString());
36InBlock.gif            for(int i=0;i<foundRows.Length;i++)
37ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
38InBlock.gif                if(dsDataSource.Tables[0].Rows[(int)id][colcount].ToString()==foundRows[i]["SD_typevalue"].ToString())
39InBlock.gif                    item += foundRows[i]["SD_typetext"].ToString();
40ExpandedSubBlockEnd.gif            }

41InBlock.gif            item += "</SPAN>";
42InBlock.gif            iTableWidth += 50;
43InBlock.gif            return item;
44ExpandedBlockEnd.gif        }
      通过自定义的这些函数可以返回不同html控件。如GetDTColumn函数,就可以在日期和时间之间加个换行。
      当然,在页面文件中调用自定义函数可以传入字段名,这样可以更直观的控制列。如果同时在后代码中修改SQL调用方式,变成灵活的读取配置或数据库的方式,那就可以不用每次都编译工程,只在页面文件中就可以随意添加、删除列了。

转载于:https://www.cnblogs.com/badwood316/archive/2007/06/15/784536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值