Page.FindControl方法找不到指定控件的原因

在ASP.NET 2.0中,引入了MasterPage的机制,在当前页使用MasterPage的情况下,放在 ContentPlaceholder1这样的内容页的控件无法用Page.FindControl来查找,原因何在?

MSDN对FindControl的解释:在当前的命名容器中搜索带指定 id 参数的服务器控件

这里有一篇文章阐述阐述FindControl方法和INamingContainers接口:http://www.odetocode.com/Articles/116.aspx

FindControl方法是在当前naming container查找指定ControlID对应的控件,该naming container是一个实现了INamingContainer接口的对象。

可以在该页的页指令中添加 Trace=Ture 指令来跟踪页面输出查看控件树。一个页面的控件树中,Page对象必然是顶级的naming container,但绝非必然是唯一的naming container。譬如当有GridView存在的话,GridView其实也是一个naming container,要找GridView中的一个ControlID,就不能用Page.FindControl,而得用[GridView对象].FindControl方法。

很多时候,因为是动态控件,明知道是在同一个naming container中,但不知道该naming container是什么对象,一个控件要找到另一个控件,可以用this.Parent.FindControl方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public void ItemClick(string dt1, string dt2) { XtraReport1 report = new XtraReport1(); Uri uri = new Uri("https://localhost:44363/user/Select?dt1=" + dt1 + "&dt2=" + dt2); using (WebClient c = new WebClient()) { c.Headers["Type"] = "GET";c.Headers["Accept"] = "application/json";c.Encoding = Encoding.UTF8; c.DownloadStringCompleted += (senderobj, es) => { if (es.Result != null) { var test = JsonConvert.DeserializeObject<DataTable>(es.Result); report.DataSource = test; report.FindControl("tableCell9", true).DataBindings.Add("Text", null, "FSTLB");//货主 report.FindControl("tableCell24", true).DataBindings.Add("Text", null, "THILB");//配货号 report.FindControl("tableCell9", true).DataBindings.Add("Text", null, "FSTLB");//批号 report.FindControl("tableCell10", true).DataBindings.Add("Text", null, "SECLB");//款号 report.FindControl("tableCell11", true).DataBindings.Add("Text", null, "OPKCRS");//stu report.FindControl("tableCell12", true).DataBindings.Add("Text", null, "PKGS");//件数 report.FindControl("tableCell13", true).DataBindings.Add("Text", null, "CARGOSZ1");//重量 report.FindControl("tableCell14", true).DataBindings.Add("Text", null, "CARGONWT");//体积 report.FindControl("tableCell15", true).DataBindings.Add("Text", null, "FACTDATE");//时间 documentViewer1.DocumentSource = report; } //else if (es.Result == null) { MessageBox.Show("未查询到数据"); } }; c.DownloadStringAsync(uri); }我在调用这段代码后并不能正确显示报表,是哪里出了问题
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值