Yesudass Moses
Yesudass Moses

Reputation: 1859

How to fill a DropDownList inside asp.net ListView control

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

Answers (1)

Paolo Costa
Paolo Costa

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

Related Questions