C# GridView客户端分页不工作

C# GridView客户端分页不工作,c#,javascript,asp.net,arrays,gridview,C#,Javascript,Asp.net,Arrays,Gridview,处理来自其他程序的数据,例如,在这段代码中,我使用来自其他程序的类似随机数数组的查询数据。查询到DataTable并绑定到GridView+添加所有行删除按钮 在删除按钮上单击-此按钮为非活动使用按钮。已启用=false;和UpdatePanel等按钮点击我有旧数组都很好。 但当我使用分页时,每次都有新的数组 如何修复它?我需要-在第一页中单击按钮-它们变为非活动状态,然后我选择第二页,然后返回第一页,并查看带有非活动按钮的旧阵列 aspx aspx.cs using System; using

处理来自其他程序的数据,例如,在这段代码中,我使用来自其他程序的类似随机数数组的查询数据。查询到DataTable并绑定到GridView+添加所有行删除按钮

在删除按钮上单击-此按钮为非活动使用按钮。已启用=false;和UpdatePanel等按钮点击我有旧数组都很好。 但当我使用分页时,每次都有新的数组

如何修复它?我需要-在第一页中单击按钮-它们变为非活动状态,然后我选择第二页,然后返回第一页,并查看带有非活动按钮的旧阵列

aspx

aspx.cs

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

namespace WebApplication1
{

        public partial class WebForm1 : System.Web.UI.Page
        {
            private  DataTable _Source;

            public WebForm1()
            {
                ResetData();
            }

            private  void ResetData()
            {
               _Source = new DataTable();
               _Source.Columns.Add("Name", typeof(string));
                _Source.Columns.Add("Number", typeof(string));
                Random rn = new Random();
                for (int t = 0; t < 100; t++)
                {
                    _Source.Rows.Add(rn.Next(1, 10).ToString(), rn.Next(1, 10).ToString());
                }

            }

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

            protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
            {

            }

            protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                _Source.Rows.RemoveAt(e.RowIndex);
                //GridView1.DataBind();
                Response.Redirect("~/WebForm1.aspx");
            }

            protected void Button1_Click(object sender, EventArgs e)
            {
                ResetData();
                GridView1.DataBind();
            }

            protected void GridView1_DataBinding(object sender, EventArgs e)
            {
                GridView1.DataSource = _Source;
            }

            protected void Button2_Click(object sender, EventArgs e)
            {
                var button = sender as Button;
                button.Enabled = false;
                var hidden = button.Parent.FindControl("HiddenField2") as HiddenField;
                var name = hidden.Value;
                DeletForName(name);
            }

            protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridView1.PageIndex = e.NewPageIndex;
               // GridView1.DataSource = _Source;
                //GridView1.DataBind();

            }
            private  void DeletForName(string name)
            {
                foreach (DataRow row in _Source.Rows)
                    if (row["Name"].Equals(name))
                    {
                      _Source.Rows.Remove(row);
                        break;
                    }
            }
        }
    }

您基本上需要在请求之间存储数据源。一种选择是使用变量:

public partial class WebForm1 : System.Web.UI.Page
    {
        private DataTable _Source;

        public WebForm1()
        {
        }

        private void ResetData()
        {
            _Source = new DataTable();
            _Source.Columns.Add("Name", typeof(string));
            _Source.Columns.Add("Number", typeof(string));
            Random rn = new Random();
            for (int t = 0; t < 100; t++)
            {
                _Source.Rows.Add(rn.Next(1, 10).ToString(), rn.Next(1, 10).ToString());
            }

            Session["data"] = _Source;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ResetData();
                GridView1.DataBind();
            }
            _Source = Session["data"] as DataTable;
        }

        protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {

        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            ((DataTable)Session["data"]).Rows.RemoveAt(e.RowIndex);
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ResetData();
            GridView1.DataBind();
        }

        protected void GridView1_DataBinding(object sender, EventArgs e)
        {

            GridView1.DataSource = _Source;
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            var button = sender as Button;
            button.Enabled = false;
            var hidden = button.Parent.FindControl("HiddenField2") as HiddenField;
            var name = hidden.Value;
            DeletForName(name);
        }

        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();

        }
        private void DeletForName(string name)
        {

            foreach (DataRow row in _Source.Rows)
                if (row["Name"].Equals(name))
                {
                    _Source.Rows.Remove(row);
                    break;
                }
        }
    }

如果您想从表中删除该项,但仍然禁用已删除行索引处的按钮,那么这将有点复杂。如果是这样的话,请告诉我,我可以试着帮你,但看起来更像是你想要的

非常感谢!它是有效的,但按钮不是。例如,我在第一页点击删除按钮-确认-按钮变为非活动状态,我选择第二页,然后返回到第一页-此按钮是活动的。我没有意识到我可以对自己的帖子发表评论,抱歉。请参阅上面我的编辑以回应您的评论。希望我在正确的轨道上,让我知道。另外,请记住,在示例代码中,delete函数实际上不能正常工作,因为datatable中的name列不包含唯一的数据@汉克斯,我试着在我的解决方案中这样做。
public partial class WebForm1 : System.Web.UI.Page
    {
        private DataTable _Source;

        public WebForm1()
        {
        }

        private void ResetData()
        {
            _Source = new DataTable();
            _Source.Columns.Add("Name", typeof(string));
            _Source.Columns.Add("Number", typeof(string));
            Random rn = new Random();
            for (int t = 0; t < 100; t++)
            {
                _Source.Rows.Add(rn.Next(1, 10).ToString(), rn.Next(1, 10).ToString());
            }

            Session["data"] = _Source;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ResetData();
                GridView1.DataBind();
            }
            _Source = Session["data"] as DataTable;
        }

        protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {

        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            ((DataTable)Session["data"]).Rows.RemoveAt(e.RowIndex);
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ResetData();
            GridView1.DataBind();
        }

        protected void GridView1_DataBinding(object sender, EventArgs e)
        {

            GridView1.DataSource = _Source;
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            var button = sender as Button;
            button.Enabled = false;
            var hidden = button.Parent.FindControl("HiddenField2") as HiddenField;
            var name = hidden.Value;
            DeletForName(name);
        }

        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

            GridView1.PageIndex = e.NewPageIndex;
            GridView1.DataBind();

        }
        private void DeletForName(string name)
        {

            foreach (DataRow row in _Source.Rows)
                if (row["Name"].Equals(name))
                {
                    _Source.Rows.Remove(row);
                    break;
                }
        }
    }
private void DeletForName(string name)
{

    foreach (DataRow row in _Source.Rows)
        if (row["Name"].Equals(name))
        {
            row["Deleted"] = true;
            break;
        }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((bool)((System.Data.DataRowView)e.Row.DataItem)["Deleted"])
        {
            ((Button)e.Row.FindControl("Button2")).Enabled = false;
        }
    }
}