簡體   English   中英

從數據表中刪除一行並顯示更新的gridview

[英]Deleting a row from datatable and displaying the updated gridview

從下拉列表中添加數據表中的數據並在gridview中顯示。 然后,我刪除一行並維護ViewState,但是在刪除一行並再次映射我的值之后,我得到了GridView中具有重復記錄的表的較早狀態。

這是代碼:

DataTable dt = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        //dt = new DataTable("tblTest");
        //dt = ViewState["updatedtbl"] as DataTable;
        DataColumn dc1 = new DataColumn();
        dc1.DataType = typeof(String);
        dc1.ColumnName = "A";
        DataColumn dc2 = new DataColumn();
        dc2.DataType = typeof(String);
        dc2.ColumnName = "B";
        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        //ViewState["dt"] = dt;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            if (Path.GetExtension(FileUpload1.FileName) == ".xlsx")
            {
                DataTable dt = new DataTable();
                ExcelPackage package = new ExcelPackage(FileUpload1.FileContent);
                dt = package.ToDataTable();

                DropDownList1.Items.Clear();

                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    DropDownList1.Items.Add(new ListItem(dt.Columns[i].ColumnName));
                }
            }
        }
    }

    protected void Button3_Click(object sender, EventArgs e)
    {

        Session["A"] += DropDownList1.SelectedItem.Value + "|";
        Session["B"] += DropDownList2.SelectedItem.Value + "|";
        CreateTable();
    }

    public void CreateTable()
    {
        string[] sa = Session["A"].ToString().Split('|');
        string[] sb = Session["B"].ToString().Split('|');
        int recordnum = sa.Length;
        for (int j = 0; j < recordnum - 1; j++)
        {

            DataRow dr = dt.NewRow();
            dr["A"] = sa[j].ToString();
            dr["B"] = sb[j].ToString();
            dt.Rows.Add(dr);
        }
        ViewState["tbl"] = dt;
        BindGrid();
    }

    protected void BindGrid()
    {
        GridView2.DataSource = dt;
        GridView2.DataBind();
    }

    protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        DataTable dx = ViewState["tbl"] as DataTable;
        //DataTable dx = dt;
        if (dx.Rows.Count > 0)
        {
            dx.Rows[e.RowIndex].Delete();
            dx.AcceptChanges();

            GridView2.DataSource = dx;
            GridView2.DataBind();
            ViewState["updatedtbl"] = dx;

        }
        else       //To check which portion of code is being executed
        {
            Label1.Text = "Deleted";
            Label2.Text = dx.Rows.Count.ToString();
        }
    }

在刪除事件中,您會將更新后的數據表重新分配給名稱為updatetbl的其他視圖狀態。 您應該將其分配給ViewState["tbl"]

if(dx.Rows.Count > 0)
        {
            dx.Rows[e.RowIndex].Delete();
            dx.AcceptChanges();

            GridView2.DataSource = dx;
            GridView2.DataBind();
            //ViewState["updatedtbl"] = dx; <<---- pay attention here
            ViewState["tbl"] = dx; <<---- pay attention here          
        }

暫無
暫無

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

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