2015-05-03 32 views
1

我有一個Listview控件,它在其InsertItemTemplate和ItemTemplate中包含dropdownlist控件。 如何填寫這些下拉列表控件? 這是我的標記。如何在asp.net中填充DropDownList ListView控件

  <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> 

回答

1

您需要處理ItemDataBound事件:

<asp:ListView ID="ListView1" OnItemDataBound="ListView1_ItemDataBound" runat="server" SelectedIndex="0" 
       InsertItemPosition="LastItem" onitemcommand="ListView3_ItemCommand"> 

,然後在後面的代碼,你可以得到每個DropDownList的對象相的FindControl的intance:你最後的評論後

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListViewItemType.DataItem) 
     { 
      var List2QuoteSubProject = e.Item.FindControl("List2QuoteSubProject") as DropDownList; 
     } 
    } 

我編輯代碼:

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; 
     } 
    } 

您可以設置填充後的下拉列表的值,您不會收到錯誤

+0

此事件在數據綁定後執行。 因此,如果我將Text設置爲綁定下拉列表,它將引發錯誤,因爲dropdownlist尚未填充。 –

+0

你在哪裏填充下拉列表? ListView1_ItemDataBound中的 –

+0

。 我想在每一行上綁定下拉列表 –