注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Start Know

自分を信じて、自分で一定でいけます

 
 
 

日志

 
 

[ASP.NET]DataList中获取FooterTemplate中控件的研究  

2008-10-23 16:45:23|  分类: .net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天在做DEMO的时候发现用普通的DataList.FindControl(String id)方法无法找到FooterTemplate中的控件。

//页面上尾部模板代码,一个按键 一个上传控件

<asp:DataList ID="DataList1" runat="server" 

            RepeatColumns="2" BackColor="#CCCCCC" BorderColor="#999999" 

            BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" 

            ForeColor="Black" GridLines="Both" 

            onselectedindexchanged="DataList1_SelectedIndexChanged" 

            style="margin-right: 275px" onitemcommand="DataList1_ItemCommand">

<%--

当中的代码略过。。。

--%>

    <FooterTemplate>

            <asp:Button ID="Button2" runat="server" Text="Add" onclick="Button2_Click" CommandArgument="aaa"/>

            <asp:FileUpload ID="FileUpload1" runat="server" />

        </FooterTemplate>

</asp:DataList>

//后台代码 用Button2_Click事件!

这里前2种方法,都无法找到FileUpload1

        protected void Button2_Click(object sender, EventArgs e)

        ...{

            FileUpload fu;

            //方法1,遍历所有ITEM

            foreach (DataListItem dli in DataList1.Items)

            ...{

                if (dli.ItemType == ListItemType.Footer)

                ...{

                    //DataList1.FooterTemplate

                    fu = dli.FindControl("FileUpload1") as FileUpload;

                    if (fu != null)

                    ...{

         responce.Write("OK!!Get it!");

                    }

                }

            }

            //方法2,FindControl方法查询

      fu = DataList1.FindControl("FileUpload1") as FileUpload;

            if (fu != null)

            ...{

                 responce.Write("OK!!Get it!");

            }

        }

//第三种方法才算成功了,在DataList1中加入事件DataList1_ItemCommand,在这里遍历所有ITEM控件才找到的

    protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)

        ...{

            if (e.CommandArgument.ToString() == "aaa")

            ...{

                foreach (Control c in e.Item.Controls)

                ...{

                    FileUpload fu = c as FileUpload;

                    if (fu != null)

                    ...{

                         responce.Write("OK!!Get it!");

                    }

                }

            }

        }

 

用最简单的方法 responce.Write 我遍历打印了所有的控件,发现

方法1 只会遍历出ItemTemplate,System.Web.UI.WebControls.DataListItem

方法2 和方法1一样Controls都是ItemTemplate中的

方法3 能得到DataList中包括 Header和Footer在内的所有Control对象 再通过一个转化就能取到了

结论:

        在DataList中的ItemCommand事件才能遍历到,模板HeadeTemplater和FooterTemplate中的控件对象,并取数据或者做其他操作。

     如果有那位高人通过其他方式同样取到模板HeadeTemplater和FooterTemplate中的控件对象的话,请赐教啊贴下 互相学习学习!!

  评论这张
 
阅读(1472)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017