DataList中获取FooterTemplate中控件的研究

翻译|其它|编辑:郝浩|2008-03-19 10:02:28.000|阅读 3036 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

今天在做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中的控件对象,并取数据或者做其他操作。
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP