Reputation: 1859
I have a Listview control which contains dropdownlist controls inside its InsertItemTemplate, and ItemTemplate. How can I fill those dropdownlist controls ? This is my markup.
<asp:ListView ID="ListView1" runat="server" SelectedIndex="0"
InsertItemPosition="LastItem" onitemcommand="ListView3_ItemCommand">
<LayoutTemplate>
<table border="0" cellpadding="1" width="100%" class="formtab">
<tr class="header" >
<th align="left" width="145px" >Sub Project</th>
<th align="left" width="145px">Alloc</th>
<th align="left" width="90px">AMT</th>
<td align="center" width="30px"></td>
</tr>
<tr id="itemPlaceholder" runat="server" style="height:30px;border:1px solid gray;"></tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr class="item" runat="server" id = "thisRow" >
<td align="left" >
<asp:DropDownList ID="List2QuoteSubProject" Text='<%# Eval("SubProjectID") %>' runat="server" Width="140px">
</asp:DropDownList>
</td>
<td align="left">
<asp:HiddenField ID="HiddenField2" Value='<%# Eval("VendorQuoteAllocationID") %>' runat="server" />
<asp:DropDownList ID="List2QuoteAllocation" Text='<%# Eval("AllocationID") %>' runat="server" Width="140px">
</asp:DropDownList>
</td>
<td align="left">
<asp:TextBox ID="List2Amount" runat="server" Text='<%# Eval("Amount") %>' Width="85px">
</asp:TextBox>
</td>
<td align="center" >
<asp:ImageButton ID="ImageButton1" runat="server" style="margin-left:8px;margin-right:8px;" ImageUrl="~/Images/icons/remove.png" Width="16" Height="16" />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
Upvotes: 1
Views: 4284
Reputation: 1989
You need to handle the ItemDataBound event:
<asp:ListView ID="ListView1" OnItemDataBound="ListView1_ItemDataBound" runat="server" SelectedIndex="0"
InsertItemPosition="LastItem" onitemcommand="ListView3_ItemCommand">
and then in code behind you can get an intance of each DropDownList object with FindControl:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var List2QuoteSubProject = e.Item.FindControl("List2QuoteSubProject") as DropDownList;
}
}
after your last comment I edit the code:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var dataItem = e.Item.DataItem as SomeType // [The type of object you use for the ListView binding];
var subpro = e.Item.FindControl("List2QuoteSubProject") as DropDownList;
BindDropDownList(subpro, "SELECT SubProjectID, SubProjectCode FROM SubProject A INNER JOIN Project B ON A.ProjectID = B.ProjectID ORDER BY B.ProjectCode, A.SubProjectCode", "SubProject", "SubProjectCode", "SubProjectID");
subpro.SelectedValue = dataItem.SubProjectID;
}
}
You can set the value of the dropdownlist AFTER you populate it, you will not get an error
Upvotes: 1