Кнопка «Сохранить» не работает при использовании панели обновления

Я создал массовый редактируемый веб-элемент управления gridview (BulkEditGridView.ascx). по приведенной ниже ссылке, просто скопировав и вставив внешний код:

http://blogs.msdn.com/b/mattdotson/archive/2005/11/09/real-world-gridview-bulk-editing.aspx

Я добавил элемент управления BulkEditGridView в другой пользовательский веб-элемент управления OrderDetailGridView.ascxи добавил источник данных в BulkEditGridView

. Что я пытаюсь сделать, так это иметь взаимозависимый раскрывающийся список и 2 текстовых поля внутри моего BulkEditGridView. (см. исходный код OrderDetailGridView.ascx )В момент изменения раскрывающегося списка текстовые поля остаются неизменными, после нажатия кнопки сохранения соответствующие значения обновляются и отображаются в текстовых полях.

Однако то, что я хочу сделать, это когда выпадающий список изменяется, прежде чем нажимать кнопку «Сохранить», я хочу видеть соответствующие значения внутри текстовых полей, а затем иметь возможность сохранить с помощью кнопки «Сохранить».

Я попытался установить autpostback=true и событие ddl _MaterialCode _SelectedIndexChanged для изменения текстовых полей, но кнопка сохранения не работает,

Пробовал ставить апдейтпанель, опять тоже самое, кнопка сохранить не сработала.

Ниже приведены исходные коды моего кода, в котором кнопка сохранения работает, когда текстовые поля обновляются после нажатия кнопки сохранения.

Исходный код BulkEditGridView.ascx (Сам ничего не добавлял, просто скопипастил):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Exportal.Controls 
{
    public partial class BulkEditGridView : System.Web.UI.WebControls.GridView
    {


        private List dirtyRows = new List();

        [IDReferenceProperty(typeof(Control))]
        public string SaveButtonID
        {
            get
            {
                string val = (string)this.ViewState["SaveButtonID"];
                if (val == null)
                {
                    return string.Empty;
                }
                return val;
            }
            set
            {
                this.ViewState["SaveButtonID"] = value;
            }
        }

        protected override GridViewRow CreateRow(int rowIndex, int dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState)
        {
            return base.CreateRow(rowIndex, dataSourceIndex, rowType, rowState | DataControlRowState.Edit);
        }

        protected override void OnLoad(EventArgs e)
        {

            base.OnLoad(e);

            //Attach an event handler to the save button.
            if (false == string.IsNullOrEmpty(this.SaveButtonID))
            {
                Control btn = RecursiveFindControl(this.NamingContainer, this.SaveButtonID);
                if (null != btn)
                {
                    if (btn is Button)
                    {
                        ((Button)btn).Click += new EventHandler(SaveClicked);
                    }
                }
            }

        }
        private void SaveClicked(object sender, EventArgs e)
        {
            this.Save();
            this.DataBind();
        }

        protected override void InitializeRow(GridViewRow row, DataControlField[] fields)
        {
            base.InitializeRow(row, fields);
            foreach (DataControlFieldCell cell in row.Cells)
            {
                if (cell.Controls.Count > 0)
                {
                    AddChangedHandlers(cell.Controls);
                }
            }
        }

        private void AddChangedHandlers(ControlCollection controls)
        {
            foreach (Control ctrl in controls)
            {
                if (ctrl is TextBox)
                {
                    ((TextBox)ctrl).TextChanged += new EventHandler(this.HandleRowChanged);
                }
                else if (ctrl is CheckBox)
                {
                    ((CheckBox)ctrl).CheckedChanged += new EventHandler(this.HandleRowChanged);
                }
                else if (ctrl is DropDownList)
                {
                    ((DropDownList)ctrl).SelectedIndexChanged += new EventHandler(this.HandleRowChanged);
                }
            }
        }

        void HandleRowChanged(object sender, EventArgs args)
        {
            GridViewRow row = ((Control)sender).NamingContainer as GridViewRow;
            if (null != row && !dirtyRows.Contains(row.RowIndex))
            {
                dirtyRows.Add(row.RowIndex);
            }
        }
        public void Save()
        {
            foreach (int row in dirtyRows)
            {
                this.UpdateRow(row, false);
            }

            dirtyRows.Clear();
        }
        private Control RecursiveFindControl(Control namingcontainer, string controlName)
        {
            Control c = namingcontainer.FindControl(controlName);

            if (c != null)
                return c;

            if (namingcontainer.NamingContainer != null)
                return RecursiveFindControl(namingcontainer.NamingContainer, controlName);

            return null;
        }
    }
}

Исходный код OrderDetailGridView.ascx:


    
        
        
        
            
                
                
            
        
        
            
                
            
        
        
            
                
            
        
        
        
        
        
    


    
        
    
    
        
        
        
        
        
        
        
        
        
    
    
        
        
        
        
        
        
        
        
        
        
    



Исходный код OrderDetailGridView.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SOrderDetailData;
using System.Data;

namespace Exportal.Controls
{
    public partial class OrderDetailGridView : System.Web.UI.UserControl
    {
        protected void ddl_MaterialCode_SelectedIndexChanged(object sender, EventArgs e)
        {

            DataTable dt = new DataTable();
            dt = OrderDetailData.GetMaterials();

            DropDownList ddl_MaterialCode = (DropDownList)sender;
            GridViewRow r = (GridViewRow)ddl_MaterialCode.Parent.Parent;

            TextBox txt_MaterialDescription = (TextBox)r.FindControl("txt_MaterialDescription");
            TextBox txt_MaterialCategory = (TextBox)r.FindControl("txt_MaterialCategory");            

            txt_MaterialDescription.Text = dt.Rows[ddl_MaterialCode.SelectedIndex]["MaterialDescription"].ToString();
            txt_MaterialCategory.Text = dt.Rows[ddl_MaterialCode.SelectedIndex]["MaterialCategory"].ToString();


        }
    }
}

5
задан HOY 7 August 2012 в 10:45
поделиться