2017-02-11 68 views
0

我環顧四周,找到了關於我的問題的答案,但我沒有發現任何確鑿的結果。我想要以下內容: 我有一個帶有GridView的asp.net表單,它沒有綁定到數據源,因此沒有預定義的列。我使用SQL Server動態數據填充gridview:ASP.NET gridview - 如何將動態填充的下拉列表添加到動態綁定的gridview中

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

現在我想在GridView的一個特定列中使用DropDownList。這DropDownList應該動態填充值(在這裏我認爲... Item.Add是適當的方法)。 我最大的問題是如何在單元格中創建DropDownLists而不能將它們靜態地定義爲asp:TemplateField在網頁的標記中?

解決我的問題的另一種方法是如何動態地使用來自數據源的數據填充靜態定義的GridView(具有靜態定義的DropDownList控件) - 無需將GridView靜態綁定到DataSource。

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

你也必須做的唯一一件事就是把在GridView的DataBBinding的IsPostBack檢查之外。否則,在回傳後你將失去DropDowns。

+0

太棒了!這就像一隻蒼蠅。謝謝VDWWD – WolfiG

0

假設的GridView(具有靜態定義的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返回,優選。 ..

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

其中

public ListItemCollection LoadList() 
      { 

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

動態的DropDownList: 將一個佔位符控件在網格模板。在後面的代碼中使用合適的id創建一個DropDownList控件,並將其添加到PlaceHolder控件中。

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

您將不得不在回發上重建此動態DropDownList並重新填充它。

+0

感謝沒有,我仍然不知道如何將數據從服務器數據綁定到此靜態定義的GV。你有沒有提示我該怎麼做?我昨天嘗試了這種「靜態佈局」方法,但不知何故未設法在設計時定義的GV中顯示數據。 – WolfiG