C# 视图状态添加、删除行

C# 视图状态添加、删除行,c#,asp.net,gridview,viewstate,C#,Asp.net,Gridview,Viewstate,我在第一次添加、删除GridView中的行时有两个问题:-当我添加一些行时,它会在第一次自动添加空白行。我使用的代码 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { initial(); //bill_date.Text = DateTime.Now.ToShortDateString(); add_bill_Gri

我在第一次添加、删除GridView中的行时有两个问题:-当我添加一些行时,它会在第一次自动添加空白行。我使用的代码

    protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        initial();
        //bill_date.Text = DateTime.Now.ToShortDateString();
        add_bill_GridView.DataSource = null;
        add_bill_GridView.DataBind();
        using (SupermarketEntities1 db = new SupermarketEntities1())
        {
            ddl_choose_item.DataSource = db.Items.ToList();
            ddl_choose_item.DataTextField = "item_name";
            ddl_choose_item.DataValueField = "item_id";
            ddl_choose_item.DataBind();
        }
    }

}

    //this put on page_load
private void initial()
{
    //creating DataTable  
    DataTable dt = new DataTable();
    DataRow dr;
    dt.TableName = "ProductsSold";

    //creating columns for DataTable  
    dt.Columns.Add("ddl_choose_item", typeof(string));
    dt.Columns.Add("txt_price", typeof(string));
    dt.Columns.Add("txt_discount", typeof(string));
    dt.Columns.Add("txt_quantitiy", typeof(string));
    dt.Columns.Add("txt_total", typeof(string));

    dr = dt.NewRow();
    dt.Rows.Add(dr);

    ViewState["ProductsSold"] = dt;
    add_bill_GridView.DataSource = dt;
    add_bill_GridView.DataBind();
}

//this put in btn_add_click 
private void add_new_row()
{
    if (ViewState["ProductsSold"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["ProductsSold"];
        DataRow drCurrentRow = null;

        if (dtCurrentTable.Rows.Count > 0)
        {
            for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
            {
                //Creating new row and assigning values  
                drCurrentRow = dtCurrentTable.NewRow();
                drCurrentRow["ddl_choose_item"] = ddl_choose_item.SelectedItem;
                drCurrentRow["txt_price"] = txt_price.Text;
                drCurrentRow["txt_discount"] = txt_discount.Text;
                drCurrentRow["txt_quantitiy"] = txt_quantitiy.Text;
                drCurrentRow["txt_total"] = txt_total.Text;
            }

            //Added New Record to the DataTable  
            dtCurrentTable.Rows.Add(drCurrentRow);
            //storing DataTable to ViewState  
            ViewState["ProductsSold"] = dtCurrentTable;
            //binding Gridview with New Row  
            add_bill_GridView.DataSource = dtCurrentTable;
            add_bill_GridView.DataBind();
        }
    }
}

//btn_add_Click
protected void btn_add_Click(object sender, EventArgs e)
{
    add_new_row();
}
    protected void BindGrid()
{
    add_bill_GridView.DataSource = ViewState["ProductsSold"] as DataTable;
    add_bill_GridView.DataBind();
}

protected void add_bill_GridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int index = Convert.ToInt32(e.RowIndex);
    DataTable dt = ViewState["ProductsSold"] as DataTable;
    dt.Rows[index].Delete();
    ViewState["ProductsSold"] = dt;
    BindGrid();
}
最后一个问题:-使用jquery还是像我这样做更好?除了处理服务器和不处理服务器,它们之间还有什么区别? 谢谢。

请看一看

首字母()

添加新行方法:

private void add_new_row()
    {
        if (ViewState["ProductsSold"] != null)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["ProductsSold"];
            DataRow drCurrentRow;

            //if (dtCurrentTable.Rows.Count > 0)
            //{
                //for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                //{
                    //Creating new row and assigning values  
                    drCurrentRow = dtCurrentTable.NewRow();
                    drCurrentRow["ddl_choose_item"] = "ddl";
                    drCurrentRow["txt_price"] = "pric";
                    drCurrentRow["txt_discount"] = "dis";
                    drCurrentRow["txt_quantitiy"] = "quan";
                    drCurrentRow["txt_total"] = "tot";
                //}

                //Added New Record to the DataTable  
                dtCurrentTable.Rows.Add(drCurrentRow);
                //storing DataTable to ViewState  
                ViewState["ProductsSold"] = dtCurrentTable;
                add_bill_GridView.DataSource = dtCurrentTable; 
                add_bill_GridView.DataBind();
            //}
        }
    }
private void add\u new\u row()
{
如果(ViewState[“ProductsSold”]!=null)
{
DataTable dtCurrentTable=(DataTable)视图状态[“ProductsSold”];
数据行drCurrentRow;
//如果(dtCurrentTable.Rows.Count>0)
//{
//对于(inti=1;i请看一看

首字母()

添加新行方法:

private void add_new_row()
    {
        if (ViewState["ProductsSold"] != null)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["ProductsSold"];
            DataRow drCurrentRow;

            //if (dtCurrentTable.Rows.Count > 0)
            //{
                //for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                //{
                    //Creating new row and assigning values  
                    drCurrentRow = dtCurrentTable.NewRow();
                    drCurrentRow["ddl_choose_item"] = "ddl";
                    drCurrentRow["txt_price"] = "pric";
                    drCurrentRow["txt_discount"] = "dis";
                    drCurrentRow["txt_quantitiy"] = "quan";
                    drCurrentRow["txt_total"] = "tot";
                //}

                //Added New Record to the DataTable  
                dtCurrentTable.Rows.Add(drCurrentRow);
                //storing DataTable to ViewState  
                ViewState["ProductsSold"] = dtCurrentTable;
                add_bill_GridView.DataSource = dtCurrentTable; 
                add_bill_GridView.DataBind();
            //}
        }
    }
private void add\u new\u row()
{
如果(ViewState[“ProductsSold”]!=null)
{
DataTable dtCurrentTable=(DataTable)视图状态[“ProductsSold”];
数据行drCurrentRow;
//如果(dtCurrentTable.Rows.Count>0)
//{

//对于(inti=1;i我发现了问题

实际上,viewstate永远不会变为null。因此,当您删除所有行时,viewstate not==null,这两个条件都会变为false

解决方案:

只是设定一个条件

 if (GridView1.Rows.Count == 0)
            {
                ViewState["ProductsSold"] = null;
            }

如果仍然感到困惑,请告诉我。

我发现了问题

实际上,viewstate永远不会变为null。因此,当您删除所有行时,viewstate not==null,这两个条件都会变为false

解决方案:

只是设定一个条件

 if (GridView1.Rows.Count == 0)
            {
                ViewState["ProductsSold"] = null;
            }


如果仍然混淆…

请告诉我您是否在if(!Page.IsPostBack)下保留了initial()条件?嗨,你能给出显示给你的错误消息吗?@VenkateswaranR是的,我do@mehdizahrane它不会从编译器中得到错误,但是在使用中,它不应该像我删除所有行并想再次添加时那样工作。我不能!!@hazem,你能删除initial()下的这一行吗方法dr=dt.NewRow();dt.Rows.Add(dr);并尝试将initial()保留在if(!Page.IsPostBack)下条件?嗨,你能给出显示给你的错误消息吗?@VenkateswaranR是的,我do@mehdizahrane它不会从编译器中得到错误,但是在使用中,它不应该像我删除所有行并想再次添加时那样工作。我不能!!@hazem,你能删除initial()下的这一行吗方法dr=dt.NewRow();dt.Rows.Add(dr);和tryI添加了它们,但不幸的是,它们一直不做任何事情。我对if条件和for循环进行了注释。是的,但我不知道出了什么问题,它被编辑了。我阅读了上面的注释,所以我将if条件if(dtCurrentTable.Rows.Count==0)和for设置为for(int i=0;我已复制了整个首字母()&添加新的行()我的..我已经测试了这段代码,它对我有效。你能删除这两个条件吗?这不是必需的。我添加了它们,但不幸的是,保持不做任何事情。我已经对if条件和for循环进行了注释。是的,但我不知道出了什么问题,它是不做任何编辑的*我阅读了上面的评论,所以我做了if条件if(dtCurrentTable.Rows.Count==0)和for(int i=0;我已经复制了我的整个initial()&add_new_row()。我已经测试了这段代码,它对我有效。请删除这两个条件,这是不必要的