繁体   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