2

遍历 Site_materials 表,找到的任何匹配项都将它们存储在“NumberOFDeliveries”中,这是应该在屏幕上显示它们的标签的 ID。

 //DELIVERIES
        int NumberOfDeliveries = (from Deliveries in db.Site_Materials
                              where Deliveries.Diary_Entry_Id == this.DiaryEntryId
                              select Deliveries).ToList().Count();
        if (NumberOfDeliveries > 0)
        {
            NoOfDeliveriesOnSite.Text = System.Convert.ToString(NumberOfDeliveries);
        }
        else
        {
            NoOfDeliveriesOnSite.Text = "0";
        }

如果我在我的 aspx 页面中使用以下标签,则 t 会按预期显示。但是我在尝试将其显示在我想要的位置时遇到了问题...在 FooterTemplate/Panel/SecurePanel/Div 内

<FooterTemplate>
                        <asp:Panel runat="server" ID="AllLinks" HorizontalAlign="Center" Width="600px" >
                            <mesh:SecurePanel runat="server" ID="EmployeeLink" CssClass="SmallBoxLink" WebMasters="true" Admins="true" Clients="true" Employees="true">
                                <div style="height:25px; margin-top:12px; margin-bottom:12px;">
    <asp:Label ID="Delivery" runat="server" Text="Deliveries=" /><asp:Label ID="NoOfDeliveriesOnSite" runat="server" />

正如我所说,这段代码工作正常并显示正确的数量(当在 aspx 页面上的差异位置使用时)但是当我尝试将它显示在我想要的位置时,我得到了错误:来自 cs. 声明“NoOfDeliveriesOnSite”的页面不存在。

关于为什么的任何想法

4

2 回答 2

2

如果它在页脚中,则需要将控制编号设置为 -1。在这个例子中,我在页脚中有一个我想要处理的标签:

dim myLabel as label
myLable = myDataRepeater.Controls(myDataRepeater.Controls.Count - 1).FindControl("lableName")

如果您尝试在用户控件中查找某个控件,则可能需要添加一个 notehr .FindControl 方法,即:

myLable = myDataRepeater.Controls(myDataRepeater.Controls.Count - 1).FindControl("lableName").findControls("anotherControl")
于 2013-02-27T16:48:01.990 回答
1

您必须在它们所在的任何容器中找到控件。

您需要在问题中提供的代码示例上方添加它,以便您对该变量的引用有效:

SecurePanel EmployeeLink = (SecurePanel)AllLinks.FindControl("EmployeeLink");
Label NoOfDeliveriesOnSite = (Label)EmployeeLink.FindControl("NoOfDeliveriesOnSite");

根据您FooterTemplate的用途(GridView,FormView等),您可能还需要首先在其中找到“AllLinks” Panel

于 2013-02-27T13:51:45.377 回答