2015-09-17 57 views
0

我有一個網格視圖,它的前三列是手動創建的,我想在後面的代碼中動態添加剩餘的列,而且其餘列中必須包含文本框。我可以這樣做嗎? 我想在下面的鏈接代碼: How to add TemplateField programmatically 利用這一點,我可以在列添加文本框,但無法找到一種方法來訪問在文本框中的值Asp.Net網格視圖與動態生成的TemplateField列

public class AddTemplateToGridView : ITemplate 
{ 
    ListItemType _type; 
    string _colName,status; 
    int i = 0; 


public AddTemplateToGridView(ListItemType type, string colname,string stat) 
    { 
     _type = type; 

     _colName = colname; 
     status = stat; 
    } 
    public AddTemplateToGridView() 
    { 

    } 
    void ITemplate.InstantiateIn(System.Web.UI.Control container) 
    { 
     switch (_type) 
     { 

      case ListItemType.Item: 
       TextBox txt = new TextBox(); 
       txt.ID =id; 
       if (status == "havevalue") 
       { 
        txt.DataBinding += new EventHandler(ht_DataBinding); 
       } 

       container.Controls.Add(txt); 
       break; 
     } 

    } 

這是我的代碼添加文本框。我可以爲每個文本框添加不同的ID嗎?我發現,當我點擊另一個按鈕時,ID會丟失,有什麼辦法可以防止這種情況發生?

+0

_ 「剩餘列必須包含文本的文本框」 _ ??你能顯示你當前的網格嗎?我認爲這是一個重複:http://stackoverflow.com/questions/12581088/how-to-add-templatefield-programmatically –

+0

當你想獲得gridview中的文本框的值,只要做循環的行數在gridview中。通過使用下面的代碼來獲取值,'string Txt =(TextBox)gridViewID.Rows [i] .Cells [0] .FindControl(「TextboxID」).text;' – Sankar

+0

我需要的是獲取每個文本框的值按鈕點擊,我可以得到buttonclick的價值嗎? – Anupama

回答

0

添加的唯一ID,您可以用DataItemIndex:

private void tb_DataBinding(object sender, EventArgs e) 
    { 
     TextBox tb = (TextBox)sender; 
     GridViewRow container = (GridViewRow)tb.NamingContainer; 

     object dataValue = DataBinder.Eval(container.DataItem, columnName, GetFormat()); 
     if (dataValue != DBNull.Value) 
      tb.Text = dataValue.ToString(); 

     tb.ID = columnName + container.DataItemIndex; 
    }