【问题标题】:ASP.NET can't find controls in a repeaterASP.NET 在转发器中找不到控件
【发布时间】:2012-06-20 06:03:48
【问题描述】:

中继器标记:

<asp:Repeater ID="Repeater_sorular" runat="server" OnItemCommand="Repeater_sorular_ItemCommand"
        OnItemDataBound="Repeater_sorular_ItemBound">
        <HeaderTemplate>
        </HeaderTemplate>
        <ItemTemplate>
            <table>
                <tr>
                    <td>
                        <rad:RadChart ID="RadChart1" runat="server" DefaultType="Pie" Width="700">
                            <PlotArea Appearance-FillStyle-FillType="Gradient" Appearance-FillStyle-MainColor="#D90420"
                                Appearance-FillStyle-SecondColor="#FFAD4A" Appearance-Border-Visible="false">
                                <EmptySeriesMessage>
                                    <TextBlock Text="Seçilen anket henüz oylanmamıştır.">
                                        <Appearance TextProperties-Font="Tahoma, 10pt, style=Bold">
                                        </Appearance>
                                    </TextBlock>
                                </EmptySeriesMessage>
                            </PlotArea>
                            <ChartTitle>
                                <TextBlock Appearance-TextProperties-Font="Tahoma">
                                </TextBlock>
                            </ChartTitle>
                            <Appearance ImageQuality="HighQuality" Border-Color="#DFDDDD" TextQuality="ClearTypeGridFit">
                            </Appearance>
                            <Series>
                                <rad:ChartSeries Type="Pie" Appearance-TextAppearance-TextProperties-Color="#FFFFFF"
                                    Appearance-TextAppearance-TextProperties-Font="Tahoma">
                                </rad:ChartSeries>
                            </Series>
                            <Legend Visible="True">
                                <TextBlock Visible="True">
                                </TextBlock>
                            </Legend>
                        </rad:RadChart>
                    </td>
                    <td>
                        <div style="font-weight: bolder; padding: 5px;">
                            <%#(((RepeaterItem)Container).ItemIndex+1).ToString() %>.
                            <%#Eval("Subject")%>
                        </div>
                        <asp:BulletedList ID="BulletedList_secenekler" runat="server" DataSource='<%#Eval("Secenekler")%>'
                            DataTextField="OptionName" DataValueField="OptionId" CssClass="sira_numarali">
                        </asp:BulletedList>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
        <FooterTemplate>
        </FooterTemplate>
    </asp:Repeater>

和转发器ItemDataBoundEvent:

protected void Repeater_sorular_ItemBound(object sender, RepeaterItemEventArgs e)
{
    RadChart RadChart1 = (RadChart)e.Item.FindControl("RadChart1");
    BulletedList bl = (BulletedList)e.Item.FindControl("BulletedList_secenekler");
}

当我调试它时,它控制返回 null。我该如何解决它。

谢谢。

【问题讨论】:

  • 你试过ClientIDMode="Static"

标签: asp.net repeater findcontrol


【解决方案1】:

为您拥有的每一行调用该方法,包括标题。第一行可能是空的,因为第一行是标题(它是空的)。为了解决它,您需要使用过滤方法

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
    //your code 
}

【讨论】:

  • 对我来说,关于 asp.net 有很多东西要学:) 谢谢。
  • 你的描述比我的问题的答案好:)
  • 当我更改图表属性时,所有图表都更改了。我可以获得特定的行项目吗?或任何方式??
  • 例如控制 c = e.item(0).findcontrol(); c.text="随便";我的意思是这样的。
  • 一种肮脏的方式是在 ItemBound 事件中使用if(e.Item.ItemIndex == 0) c.Text="whatever";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2011-10-03
  • 2023-04-08
相关资源
最近更新 更多