簡體   English   中英

asp.net gridview的外部按鈕來保存

[英]asp.net gridview outside button to save

我有在運行時動態構建的gridview綁定到datatable,以及用於保存放置在gridview外部的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();
            }
        }  
    }

所以我有一個textview的gridview可以立即打開以進行全部編輯。問題是,當我單擊“ gridview之外”的“保存”按鈕時,所有textbox都消失了

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];
                }
            }
}

看起來您沒有在回發之后創建GridView,並且“保存”按鈕正在引起回發。 您需要在每次頁面加載時動態創建GridView。 另外,我發現ASP.NET頁面生命周期中的此文檔在許多場合都很有幫助。

在文檔中,您將看到代碼無法正常工作的有點不直觀的原因-btnSave_Command直到回發和Page_Load之后才運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM