2011-11-18 32 views
2

本周我遇到了一个问题,试图确定使用什么控件来以非网格外观的方式显示来自多个数据源的数据。感谢这个论坛,我了解到最好的方式是在中继器内部使用具有不同控件的中继器,如标签和表格。我不完全确定如何实现它的全部实现,但我需要学习的第一件事是如何更改表格背后的代码以及我将在转发器中使用的Label的文本。我已经阅读并发现以下内容应该可以工作。但它没有。从代码中引用控制ID在中继器

for (int i = 0; i <= Repeater1.Items.Count - 1; i++) 
      { 
       Label labelCustomerID = (Label)Repeater1.Items[i].FindControl("labelCustomerID"); 
       labelCustomerID.Text = "from code Behind"; 

      } 

我的声明语法是这样的:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> 
    <ItemTemplate> 
      <hr/> 
      <asp:Label runat="server" ID="labelCustomerId" /> 
      <div style="padding-left:150px"> 
       <asp:Label runat="server" ID="labelCustomerName" /> 
       <asp:Label runat="server" ID="labelCustomerAddress" /> 
       <asp:Label runat="server" ID="labelCityState" />  
      </div> 
      <asp:GridView runat="server" ID="gridViewRecordData"> 

      </asp:GridView> 
      <hr/> 
     </ItemTemplate> 
</asp:Repeater> 

感谢教育局我已经远远得到这一点。不知道我要如何填充一个数据记录的GridView,但首先要做的事情是......我需要能够更改标签的文本。如果我能做到这一点,我相信其余的将会落实到位。

请帮帮我! :) 戴尔

+0

你可以发布你的代码隐藏文件的所有代码吗?我认为你在填充之前引用了中继器。 –

+0

谢谢。就是这样。我没有意识到在获得控件名称之前你必须将数据绑定到它。现在我知道了!哈!谢谢。 – dellbingham

+0

我会继续发布上述评论作为答案,以便可以关闭问题。请标记为答案。谢谢。 –

回答

0

尝试使用此代码:

for (int i = 0; i <= Repeater1.Items.Count - 1; i++) 
     { 
      if(Repeater1.Items[i].ItemType == ListItemType.Item || Repeater1.Items[i].ItemType == ListItemType.AlternatingItem) 
      { 
       Label labelCustomerID = (Label)Repeater1.Items[i].FindControl("labelCustomerID"); 
       labelCustomerID.Text = "from code Behind"; 
      } 

     } 
+0

随着你给我的代码,我得到以下错误:错误9'对象'不包含'FindControl'的定义和没有扩展方法'FindControl'接受类型'对象'的第一个参数可以找到(你是否缺少一个使用指令或程序集引用?) – dellbingham

+0

ooops,今天我累了...我编辑了我的答案。 – schglurps

+0

谢谢。我很抱歉地发现你。没有错误,但作为调试,逻辑永远不会进入for循环。原因是因为页面加载时Repeater1.Items.Count等于0。我应该减去1吗? – dellbingham

0

我想你引用的中继器被填充之前。