2014-03-31 46 views
0

我試圖將dropdownlist添加到GridView中的列。我有這樣的事情:將Dropdownlist從代碼隱藏添加到gridview列

DataTable dt = new DataTable(); 
     DataColumn dc = new DataColumn(); 

     if (dt.Columns.Count == 0) 
     { 
      dt.Columns.Add("Names", typeof(string)); 
      dt.Columns.Add("Selection", typeof(string)); 

     } 

DropDownList ddlSelection= new DropDownList(); 

     ddlSelection.Items.Add(new ListItem("one")); 
     ddlSelection.Items.Add(new ListItem("two")); 


DataRow NewRow = dt.NewRow(); 
NewRow[0] = lblname.Text; 
NewRow[1] = ddlSelection.Items; 
dt.Rows.Add(NewRow); 

我得到一個typeof錯誤。任何人都可以幫助我?

謝謝!

+0

dt.Columns.Add(「Selection」,typeof(string));我認爲這是問題。 gridview不顯示te dropdownlist,它顯示控制名稱的字符串,如:System.Web.UI.WebControls.ListItemCollection。假設顯示控制。 – user3114347

+0

如果你這樣做,你不能添加dropdownlist,你需要創建一個模板字段並動態添加到gridview。爲什麼不在aspx頁面中添加下拉菜單? –

+0

我也許可以在代碼隱藏中做到這一點。但你是對的。我可以在前端做到這一點 – user3114347

回答

0

我不認爲你可以將控件添加到一個DataTable,嘗試處理GridView控件的數據綁定行動,並在foreach(在GridView1.rows GridviewRow R)循環添加控件到GridView的任何一個細胞循環。

//edit:  
    protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     DataColumn dc = new DataColumn(); 

     if (dt.Columns.Count == 0) 
     { 
      dt.Columns.Add("Selection", typeof(string)); 
      dt.Columns.Add("Names", typeof(string)); 
     } 

     DropDownList ddlSelection = new DropDownList(); 

     ddlSelection.Items.Add(new ListItem("one")); 
     ddlSelection.Items.Add(new ListItem("two")); 

     for(int i= 0; i < 10; i++) 
     { 
      DataRow NewRow = dt.NewRow(); 
      NewRow[1] = "dropdownlist"+i; 
      dt.Rows.Add(NewRow); 
     } 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 

    protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     foreach (GridViewRow r in GridView1.Rows) 
     { 
      DropDownList ddlSelection = new DropDownList(); 

      ddlSelection.Items.Add(new ListItem("one")); 
      ddlSelection.Items.Add(new ListItem("two")); 
      r.Cells[0].Controls.Add(ddlSelection); 
     } 
    } 
+0

這個可以工作,但帶有下拉列表的新列顯示在gridview左邊的「dt.Columns.Add(」Names「,typeof(string));」之前。任何想法如何使它在右邊消失後,我的第一列與名稱? – user3114347

+0

我不確定你想要什麼,你是說你想讓下拉菜單出現在左邊?所以只需將r.Cells [索引更改爲您想要的位置]查看編輯即可。 –

0

一個簡單的方法來做到這一點將創建一個用戶控制你需要什麼,並加載它作爲模板字段。 但是,每次頁面加載時,此模板字段都會清除,因此每次加載頁面時都需要它。

foreach (DataRow dr in dt.Rows) 
      { 
       int index = dt.Rows.IndexOf(dr); 
       if(index =1) 
      { 
       TemplateField tF = new TemplateField(); 
       tF.HeaderText = dr["COLUMN_NAME"].ToString(); 
       tF.ItemTemplate = LoadTemplate("/xxxxxx.ascx"); 
       GridView1.Columns.Add(tF); 
      } 
     }