I currently have a datareader as my datasource which is bound to a repeater. as seen here:
Try
myConnection.Open()
sqlCommand = New SqlCommand(sqlText, myConnection)
dr = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection)
cropPlanRepeater.DataSource = dr
cropPlanRepeater.DataBind()
Catch ex As Exception
End Try
This launches the databound event, like so:
Public Sub CropPlanRepeater_ItemDataBound(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles cropPlanRepeater.ItemDataBound
Dim rptI As RepeaterItem = e.Item
Dim AmttoSell = TryCast(rptI.FindControl("amtToSell"), Label)
AmttoSell.Text = AmttoSell
End Sub
For some reason, this findcontrol method, keeps returning “null” or “nothing” I’ve tried to see if there is a flaw in my heirarchy of controls and whatnot, but I can’t find anything.
here’s the HTML for a look at how it works:
<asp:Repeater ID="cropPlanRepeater" runat="server" Visible="false">
<HeaderTemplate>
<tr align="center" class="top-rpt-head">
<th scope="col">
Crop
</th>
<th scope="col">
Production
</th>
<th scope="col">
Amount to Sell
</th>
<th scope="col">
Breakeven
</th>
<th scope="col">
Target Price
</th>
<th scope="col">
Target Revenue
</th>
<th scope="col">
Feed Value
</th>
<th scope="col">
Other Income
</th>
<th scope="col">
Expenses
</th>
<th scope="col">
Profit
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr align="center">
<td>
<!--- this needs to be fixed- incorrect methodology(should be done in the codebehind)----->
<%# (DataBinder.Eval(Container.DataItem, "Crop_Name"))%>
</td>
<td>
<!--- this needs to be fixed- incorrect methodology(should be done in the codebehind)----->
<%# (DataBinder.Eval(Container.DataItem, "Acres_D") * DataBinder.Eval(Container.DataItem, "Yield_D") + DataBinder.Eval(Container.DataItem, "Acres_I") * DataBinder.Eval(Container.DataItem, "Yield_I"))%>
</td>
<td>
</td>
</tr>
<asp:label runat="server" ID="AmtToSell"></asp:Label>
<asp:Literal runat="server" ID="Yield_I" Text='<%#Eval("Yield_I") %>' Visible="false" />
<asp:Literal runat="server" ID="Yield_D" Text='<%#Eval("Yield_D") %>' Visible="false" />
<asp:Literal runat="server" ID="Acres_I" Text='<%#Eval("Acres_I") %>' Visible="false" />
<asp:Literal runat="server" ID="Acres_D" Text='<%#Eval("Acres_D") %>' Visible="false" />
<asp:Literal runat="server" ID="Storage" Text='<%#Eval("Storage") %>' Visible="false" />
<asp:Literal runat="server" ID="Fed" Text='<%#Eval("Fed") %>' Visible="false" />
<asp:Literal runat="server" ID="Bartered" Text='<%#Eval("Bartered") %>' Visible="false" />
<asp:Literal runat="server" ID="Profit_I" Text='<%#Eval("ProfAcre_I") %>' Visible="false" />
<asp:literal runat="server" ID="Profit_D" Text='<%#Eval("ProfAcre_D") %>' Visible="false" />
</ItemTemplate>
</asp:Repeater>
I’ve tried putting the label inside and outside of the the tables, and the to no avail. I’m not sure if there’s an issue with my HTML or the codebehind. I need to manipulate that label “amttosell” with a calculation in the codebehind. (I’d do something like amttosell.text = some calculation from data acquired from the database/posted on the hidden labels above
Any help would be GREATLY appreciate.
The CropPlanRepeater_ItemDataBound method handles the header, footer, and the items. For the code you have, you need to wrap it in an
ifblock checking that the item type is Item or AlternateItem.See http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx#Y200