2012-03-31 96 views
0

我有一個GridView和GridView的我有一個項目模板GridView中每一行如下如何找到一排控制並將其綁定到數據

 <ItemTemplate> 
     <asp:DropDownList runat="server" ID="ddlProductNames"> 
     </asp:DropDownList> 
    </ItemTemplate> 

現在我需要綁定此到數據,但我很難找到它並將其綁定到數據。

在GridView有4個模板列,每個模板字段中1周的ItemTemplate這樣

<asp:TemplateField HeaderText="Product Name" ItemStyle-HorizontalAlign = "Center" > 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txt1" /> 
      </ItemTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Products" ItemStyle-HorizontalAlign = "Center" > 
      <ItemTemplate> 
       <asp:DropDownList runat="server" ID="ddlProductNames"> 
       </asp:DropDownList> 
      </ItemTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Image" ItemStyle-HorizontalAlign = "Center" > 
      <ItemTemplate> 
       <asp:FileUpload runat="server" ID="image" /> 
      </ItemTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Active" ItemStyle-HorizontalAlign = "Center"> 
      <ItemTemplate> 
       <asp:CheckBox Text="Active" runat="server" ID="active" /> 
      </ItemTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
     </asp:TemplateField> 

,我試圖向下拉結合具體情況如下

protected void Grid_OnRowDataBound(Object sender, GridViewRowEventArgs e) 
    { 
     // Bind Products 
     Product productManager = new Product(); 
     TList<Product> dsProduct= productManager.GetAll(); 

     DropDownList ddlProducts = Grid.Rows[e.Row.RowIndex].Cells[1].Controls[0].FindControl("ddlProductNames") as DropDownList; 
     if (dsProduct != null) 
     { 
      DataView dvProduct = new DataView(dsProduct.ToDataSet(true).Tables[0]); 
      dvProduct.Sort = "name asc"; 
      ddlProducts.DataSource = dvBrand; 
      ddlProducts.DataTextField = "name"; 
      ddlProducts.DataValueField = "productId"; 
      ddlProducts.DataBind(); 
      ListItem li = new ListItem("No Product Selected", "0"); 
      ddlProducts.Items.Insert(0, li); 
     } 
    } 

我得到一個出指數在行DropDownList ddlProducts = Grid.Rows[e.Row.RowIndex].Cells[1].Controls[0].FindControl("ddlProductNames") as DropDownList;我正在學習這個過程,所以我會感謝一些幫助,在我做錯了什麼和我需要改變。我真的很感激任何幫助。

回答

1

您必須使用FindControl在TemplateField中查找控件。您還需要排除標題行:

protected void Grid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView)e.Row.DataItem).Row; 
     DropDownList ddlProducts = (DropDownList)e.Row.FindControl("ddlProductNames"); 
     ddlProducts.DataSource = someDataSource; 
     ddlProducts.DataTextField = "name"; 
     ddlProducts.DataValueField = "productId"; 
     ddlProducts.DataBind(); 
    } 
} 

你也不需要調用productManager.GetAll()在網格中的每一行。您只需要獲取當前行的產品。如果源對於每一行都是相同的,則應在將GridView作爲成員變量綁定之前創建它。那麼你不需要爲每一行檢索相同的數據。

相關問題