2012-12-08 24 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创建代码移动到按钮按下后发生的页面生命周期中的某些事物。 –