2017-02-11 52 views
0

私はすでに私の問題についての答えを探しましたが、決定的なものは見つけられません。私は次のようにしたい: 私はGridViewを持つasp.netフォームを持っているので、データソースにバインドされていないため、あらかじめ定義された列はありません。グリッドビューには、SQL Serverのデータを動的に取り込みます。ASP.NETグリッドビュー - 動的にバインドされたドロップダウンを動的にバインドされたグリッドビューに追加する方法

gvComponentLocks.DataSource = getComponentsAndLocks(worksPermitID); 
//Note getComponentsAndLocks encapsulates the database query and returns a DataTable 
gvComponentLocks.DataBind(); 

GridViewの特定の列にDropDownListを設定したいとします。このDropDownListには動的に値が設定されます(ここではItem.Addが適切なアプローチだと思います)。 私の最大の問題は、Webページのマークアップでasp:TemplateFieldとして静的に定義することができずに、セルにDropDownListsを作成する方法です。

静的に定義されたGridView(静的に定義されたDropDownListコントロール)にデータソースからのデータを動的に取り込む方法は、GridViewを静的にDataSourceにバインドする必要はありません。サイドでのGridViewを仮定

+0

実際にはかなり簡単です。 html内でデータソースコントロールを試し、そこにバインドしてください。あなたのドロップダウンリストにdatasourceIdを与えてください。 – Valkyrie

答えて

0

GridViewのRowDataBoundイベントで動的にDropDownListを作成できます。

protected void gvComponentLocks_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //check if the row is a datarow 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //create a new dropdownlsit 
     DropDownList ddl = new DropDownList(); 

     //bind the source and define the values 
     ddl.DataSource = getComponentsAndLocks(worksPermitID); 
     ddl.DataTextField = "columnA"; 
     ddl.DataValueField = "columnB"; 
     ddl.DataBind(); 

     //add the dropdownlist to the gridview in column 1 
     e.Row.Cells[1].Controls.Add(ddl); 
    } 
} 

あなたもしなければならない唯一の事はIsPostBackチェック外のGridViewのDataBBindingを配置することです。さもなければ、あなたはPostBackの後にDropDownsを失います。

+0

素晴らしい!これは、フライのように動作します。ありがとうVDWWD – WolfiG

0

(静的に定義されたDropDownListコントロール付き)

<asp:DropDownList ID="DropDownList1" runat="server"> 
               </asp:DropDownList> 

protected void gvComponentLocks_RowDataBound(object sender, GridViewRowEventArgs e) 
    if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if ((e.Row.RowState & DataControlRowState.Edit) > 0) 
      { 

ような何か...

DropDownList DropDownList1 = (DropDownList)e.Row.FindControl("DropDownList1"); 
DropDownList1.DataSource=SomeDropDownList1ItemCollection 
DropDownList1.Bind(); 

は、あるいは、好ましくは、ListItemCollectionから戻ります。 ..

グリッドで、テンプレート内のプレースホルダコントロールを配置 :

public ListItemCollection LoadList() 
      { 

    ListItemCollection Items = new ListItemCollection(); 
       Items.Add(new ListItem("Choose from list...", "")); 
       Items.Add(new ListItem("Text","Value") 

ダイナミックDropDownListの

gvComponentLocks.Items.AddRange(LoadList().Cast<ListItem>().ToArray()); 

。コードの背後に適切なIDを持つDropDownListコントロールを作成し、PlaceHolderコントロールに追加します。

DropDownList DropDownList1= new DropDownList(); 
DropDownList1.ID=... 
etc 
YourPlaceHolderControl.Controls.Add(DropDownList1) 

この動的DropDownListをポストバックに戻して再作成する必要があります。

+0

ありがとうございました。まだ、サーバからこの静的に定義されたGVにデータをバインドする方法はわかりません。あなたは私にそれをどうやって行うのかのヒントを持っていますか?私は昨日、この「静的レイアウト」アプローチを試みましたが、何とかして設計時に定義されたGVにデータを表示することはできませんでした。 – WolfiG

関連する問題