2012-03-31 5 views
0

データにバインドします私はそれを見つけてそれをデータにバインドするのに苦労している。どのように私はこれをバインドする必要がある行のコントロールを見つけ、私はGridViewコントロールを持っているし、GridViewの中で、私は項目テンプレートを得た

のGridViewはこの

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

などの各テンプレートフィールド内の1つのItemTemplateにと4 templatefieldsを持っていると私は

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

TemplateFieldでコントロールを検索するには、FindControlを使用する必要があります。あなたはまた、グリッド内のすべての行についてproductManager.GetAll()を呼び出す必要はありません

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

:あなたはまた、ヘッダー行を除外する必要があります。あなたは、現在の行のための製品を取得する必要があります。ソースがすべての行で同じ場合は、GridViewをメンバー変数としてバインドする前にソースを作成する必要があります。次に、各行に対して同じデータを取得する必要はありません。

関連する問題