思归等高手请进:如何取得templated control的template部分内容

athossmth 2005-03-19 11:06:00
如一个简单的DataGrid,在aspx页面中的内容是:

<asp:datagrid id="DataGrid1" style="Z-INDEX: 102; LEFT: 21px; POSITION: absolute; TOP: 278px" runat="server" AutoGenerateColumns="False" AllowPaging="True" Width="579px" PageSize="5" ShowFooter="True" Height="18px" Visible="True">
<AlternatingItemStyle BackColor="WhiteSmoke"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="Aqua" BackColor="Navy"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Shipper">
<HeaderStyle Width="200px"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Label3" runat="server">ssg.ShipVia</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="TextBox2" runat="server">ssg.ShipVia</asp:TextBox>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle PageButtonCount="20" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

当然这里只写了一列,可能有很多列。

现在我想继承datagrid类,比如叫MyDatagrid,上面都可以照抄,只是最外面的tag变了,成为:

<athos:mydatagrid id="DataGrid1" style="Z-INDEX: 102; LEFT: 21px; POSITION: absolute; TOP: 278px" runat="server" AutoGenerateColumns="False" AllowPaging="True" Width="579px" PageSize="5" ShowFooter="True" Height="18px" Visible="True">
<AlternatingItemStyle BackColor="WhiteSmoke"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="Aqua" BackColor="Navy"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Shipper">
<HeaderStyle Width="200px"></HeaderStyle>
<ItemTemplate>
<asp:Label id="Label3" runat="server">ssg.ShipVia</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="TextBox2" runat="server">ssg.ShipVia</asp:TextBox>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle PageButtonCount="20" Mode="NumericPages"></PagerStyle>
</athos:mydatagrid>

请问,怎样才能获得<athos:mydatagrid>tag里面的内容呢?

不知道有没有说清楚,请指点,多谢!
...全文
161 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjcking 2005-04-22
  • 打赏
  • 举报
回复
up
saucer 2005-04-21
  • 打赏
  • 举报
回复
after looking into it, I don't think it is possible

because that part is done by the compiler, it is not possible to retrieve that part at runtime, sorry
athossmth 2005-04-21
  • 打赏
  • 举报
回复
思归,前阵子在忙别的,回到这个问题,你给的两个联结还是不能解决问题啊。

第一个gotdotnet的,Templated Control,每一个Template都要定义一个类,这个类自己parse了。

第二个dotnetdan的,只说

  对于<%# DataBinder.Eval(Container.DataItem, "Length") %>
  The generated code is:
target.SetDataBoundString(0, Convert.ToString(DataBinder.Eval(Container.DataItem, "Length")));

但是,无法截获。

问题简单化一点,对于一个DataGrid,如果某一column中有这样一个控件

<asp:Label id="LableFoo" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.FieldFoo") %>'> </asp:Label>

有没有任何办法,重载datagrid或page或别的任何方法、事件也好,可以在程序运行时,知道这个LableFoo对应于FieldFoo么?

同时给问题加点分,请高手们赐教,谢谢!
saucer 2005-03-29
  • 打赏
  • 举报
回复
also see
http://dotnetdan.com/articles/aspnet/DataBinding.htm
saucer 2005-03-29
  • 打赏
  • 举报
回复
I think you are on the wrong track, but if you insist, you might want to hook into the parsing process, see the part "Overriding Control Parsing" (AddParsedSubObject):

http://samples.gotdotnet.com/quickstart/aspplus/doc/webctrlauthoring.aspx
athossmth 2005-03-29
  • 打赏
  • 举报
回复
是的,我看到Columns了,但是希望看到aspx页面的源代码。

  比如这样一个column
<asp:TemplateColumn HeaderText="UnitPrice">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.abcdefg") %>'>
</asp:TextBox>
</ItemTemplate>
<FooterTemplate></FooterTemplate>
<EditItemTemplate></EditItemTemplate>
</asp:TemplateColumn>

我希望看到这些内容。

  因为等我在itemdatabound或者itemcreate里看到column的时候,Text='<%# DataBinder.Eval(Container, "DataItem.abcdefg") %>'的解析过程已经完成了,我只能看到TableCell.Text,看不到DataBinder.Eval(Container, "DataItem.abcdefg")这个消息。

  事实上,我想做的是,继承datagrid做一个自己的控件,如果abdedfg这个field被某个datarelation定义了需要映射到某个master table,这里就自己画一个dropdownlist……

  我知道问题有点wierd,请问思归,有办法吗?
saucer 2005-03-29
  • 打赏
  • 举报
回复
since your superclass is DataGrid, the declared Columns should become YourDataGrid.Columns property
athossmth 2005-03-29
  • 打赏
  • 举报
回复
看到思归来了,顶一下,同时给贴子加50分,这50是给帮着顶贴子的……谢谢各位了……
njuzgj 2005-03-22
  • 打赏
  • 举报
回复
学习
athossmth 2005-03-21
  • 打赏
  • 举报
回复
看到思归来了,顶一顶 :)
752 2005-03-20
  • 打赏
  • 举报
回复
findcontrol
blackhero 2005-03-20
  • 打赏
  • 举报
回复
我来学习的
2002pine 2005-03-20
  • 打赏
  • 举报
回复
用findcontrol
hackate 2005-03-20
  • 打赏
  • 举报
回复
是用户控件吗?用公开的用户控件属性或者方法
ycc2008 2005-03-20
  • 打赏
  • 举报
回复
大侠啊,顶
athossmth 2005-03-20
  • 打赏
  • 举报
回复
>>查查MSDN有关TemplateControl吧,里面提供设计TemplateControl所需要使用到的所有知识。不过如果你真的想知道.NET是如何对TemplateControl进行处理的(如何分析aspx页面内的内容),那就用Reflector看看System.Web.UI下面的一些名称为*Parser的类吧。

多谢cat_hsfz关注,你的思路和我一样,我也这么想过了,问题是,如果是自己定义一个templated control,可以先ParseChildren(false)然后CreateChildControls里再处理。

可是,我并不是重新写一个Templated Control,而是重载DataGrid这个Templated Control。DataGrid会解析aspx页面的template的内容,我只能读到解析后的结果…… :(

也就是因此,2002pine说的,FindControl之后的结果对我没有意义,一个<asp:BoundColumn DataField="OrderId" ReadOnly="True" HeaderText="Order"></asp:BoundColumn>被aspx解析之后FindControl只能看到一个Literal控件而已。所有的设计时信息都丢失了……

顶一下,盼望思归等高手关注!
wjcking 2005-03-20
  • 打赏
  • 举报
回复
查查MSDN有关TemplateControl吧,里面提供设计TemplateControl所需要使用到的所有知识。不过如果你真的想知道.NET是如何对TemplateControl进行处理的(如何分析aspx页面内的内容),那就用Reflector看看System.Web.UI下面的一些名称为*Parser的类吧。
cat_hsfz 2005-03-19
  • 打赏
  • 举报
回复
查查MSDN有关TemplateControl吧,里面提供设计TemplateControl所需要使用到的所有知识。不过如果你真的想知道.NET是如何对TemplateControl进行处理的(如何分析aspx页面内的内容),那就用Reflector看看System.Web.UI下面的一些名称为*Parser的类吧。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧