2012-12-08 23 views
0

我已經gridview的動態建立在運行時結合數據表,和按鈕保存配置以外的GridView gridview的數據asp.net gridview的保存

1-創建的GridView

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     CreateGrid(); 
    } 
} 

     void CreateGrid() 
     { 
       int nTransID = Convert.ToInt32(Session["trans_id"]); 
       // 
       string strSQL = @"EXEC [dbo].[sp_GetTransaction] " + nTransID; 
       DataTable dtData = clsGlobal.GetDataTable(strSQL); 
       // 
       if (ViewState["dtTransDetail"] == null) ViewState.Add("dtTransDetail", dtData); 
       else ViewState["dtTransDetail"] = dtData; 
       // 
       foreach (DataColumn dc in dtData.Columns) 
       { 
        if (dc.ColumnName.Contains("!;")) 
        { 
         TemplateField tField = new TemplateField(); 
         tField.ItemTemplate = new AddTemplateToGridView(ListItemType.Item, dc.ColumnName); 
    //\\ --- template contain textbox 
         tField.HeaderText = dc.ColumnName; 
         GridView1.Columns.Add(tField); 
        } 
       } 
      } 

這是我的模板類:

public class AddTemplateToGridView : ITemplate 
    { 
     ListItemType _type; 
     string _colName; 

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

     void ITemplate.InstantiateIn(System.Web.UI.Control container) 
     { 
      switch (_type) 
      { 
       case ListItemType.Item: 
        TextBox text = new TextBox(); 
        text.ID = "txtAmount"; 
        text.DataBinding += new EventHandler(txt_DataBinding); 
        container.Controls.Add(text); 
        break; 
      } 
     } 

     void txt_DataBinding(object sender, EventArgs e) 
     { 
      TextBox textBox = (TextBox)sender; 
      GridViewRow container = (GridViewRow)textBox.NamingContainer; 
      object dataValue = DataBinder.Eval(container.DataItem, _colName); 
      if (dataValue != DBNull.Value) 
      { 
       textBox.Text = dataValue.ToString(); 
      } 
     } 
    } 

所以我有一個textboxe GridView的所有開放一次 編輯的問題是,當我點擊保存按鈕「,這是歐tside gridview「所有文本框不見了

protected void btnSave_Command(object sender, CommandEventArgs e) 
     { 
for (int nRow = 0; nRow < GridView1.Rows.Count; nRow++) 
      { 
       for (int nCol = 0; nCol < GridView1.Columns.Count; nCol++) 
       { 
        if (GridView1.Rows[nRow].Cells[nCol].Controls.Count == 0) continue; 
//\\ --- Controls.Count always = 0 
//\\ --- However each cell contain textbox 
//\\ --- textbox disappear after save button clicked 
        TextBox txt = (TextBox)GridView1.Rows[nRow].Cells[nCol].Controls[0]; 
       } 
      } 
} 
+0

我不能完全弄清楚你正在嘗試做什麼。保存按鈕應該保存每個文本框的值嗎? –

回答

0

看起來你沒有在回發後創建GridView,並且保存按鈕導致回發。您需要在每次頁面加載時動態創建GridView。另外,我發現this documentation on the ASP.NET page lifecycle在許多場合很有幫助。

在文檔中,您會看到代碼不能正常工作的稍微不直觀的原因 - btnSave_Command只有在回發和Page_Load之後纔會運行。

+0

感謝您的回覆 我試圖保存點擊保存按鈕時的所有gridview數據。 現在發生了什麼事情,在按鈕命令事件之前觸發回發和加載事件,如果我在每個頁面上再次創建datagrid加載新值將消失 – Abady

+0

將GridView創建代碼移動到按鈕按下後發生的頁面生命週期中的某些事物。 –