Имам два Formviews на една и съща страница. Мога да използвам FindControl на първия без проблем, но винаги се проваля на втория.
Използвам ItemTemplate и за двата, и двата по подразбиране са само за четене, и двата са обвързани с SQLDataSources (различни), но не мога да разбера защо FindControl работи за единия, а не за другия.
Премахнах голяма част от обикновения текст от кода по-долу.
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:SoftSaleDBConnectionString %>"
SelectCommand="SELECT * FROM [Apps] WHERE ([AppID] = @AppID)" >
<SelectParameters>
<asp:FormParameter FormField="AppID" Name="AppID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:FormView ID="FormView1" runat="server" DataKeyNames="AppID"
DataSourceID="SqlDataSource1">
<ItemTemplate>
<h1>
<asp:Label ID="AppNameLabel" runat="server" Text='<%# Bind("AppName") %>' />
<asp:Label ID="VersionLabel" runat="server" Text='<%# Bind("Version") %>' /> for
<asp:Label ID="OSLabel" runat="server" Text='<%# Bind("OS") %>' />
</h1>
<p>Text here</p>
<p><asp:TextBox ID="LicenseTextBox" runat="server"
Text='<%# Eval("License")%>'
TextMode="MultiLine" Width="800px" Rows="25" ReadOnly="True"></asp:TextBox></p>
<asp:HiddenField ID="AppLocation" runat="server" ViewStateMode="Inherit" Value='<%# Bind("AppLocation") %>'/>
</ItemTemplate>
</asp:FormView>
<p><asp:Literal ID="SizeLiteral" runat="server"></asp:Literal></p>
<asp:SqlDataSource ID="SqlDataSource4" runat="server"
ConnectionString="<%$ ConnectionStrings:SoftSaleDBConnectionString %>"
SelectCommand="SELECT * FROM [Installations] WHERE (([AppID] = @AppID) AND ([Username] = @Username))" >
<SelectParameters>
<asp:FormParameter FormField="AppID" Name="AppID" Type="Int32" />
<asp:FormParameter FormField="Username" Name="Username" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:FormView ID="DLFormView" runat="server" DataSourceID="SqlDataSource4"
DataKeyNames="AppID,Username">
<ItemTemplate>
<p> <asp:Label ID="DLAppNameLabel" runat="server" />
<br />
<br />
<asp:Label ID="NumberOfInstallations" runat="server" Text='<%# Bind("Installations") %>'></asp:Label>
<br />
<asp:HiddenField ID="TotalInstallations" runat="server" />
Number of New Installations:
<asp:DropDownList ID="NumberOfNewInstallations" runat="server">
</asp:DropDownList>
<br />
<asp:Label ID="TotalNumberOfInstallations" runat="server" Text="Label"></asp:Label>
</p>
</ItemTemplate>
</asp:FormView>
И кодирането на FindControl е както следва...
TextBox LicTextBox = (TextBox)FormView1.FindControl("LicenseTextBox");
HiddenField AppLocCode = (HiddenField)FormView1.FindControl("AppLocation");
Label AppNameCode = (Label)FormView1.FindControl("AppNameLabel");
Тези винаги работят...
Label DLAppNameCode = (Label)DLFormView.FindControl("DLAppNameLabel");
Това винаги връща нула. Прочетох милиони примери за контролите, които не се изобразяват, докато обвързването на данни не завърши, но със сигурност, ако двата FOrmView са настроени по един и същи начин, резултатът трябва да е същият.
Всяка помощ ще бъде много ценена :)
Мат :)
TextBox LicTextBox = (TextBox)FormView1.FindControl("LicenseTextBox");
, дебъгерът прескача в aspx страницата и преглежда всички asp полета във FormView1. Когато достигнаLabel DLAppNameCode = (Label)DLFormView.FindControl("DLAppNameLabel");
Кодът не прескача към aspx страницата adn, следователно не търси никакви asp контроли. Някой да знае защо? - person Matty W   schedule 27.02.2012