C# 视图状态添加、删除行
我在第一次添加、删除GridView中的行时有两个问题:-当我添加一些行时,它会在第一次自动添加空白行。我使用的代码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
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()。我已经测试了这段代码,它对我有效。请删除这两个条件,这是不必要的