还是以订单为例子,一个订单下面有多条信息,一条信息添加一次,但不能直接添加到数据库里,这时就要保存到session或viewsatte中,这里我选择的是viewstate,因为这个功能不用跨页面,整个过程是在一个页面中完成的,等把订单中的所有信息保存到viewstate中后,再一次把这个viewstate添加到数据库中, 其实我理解的viewstate就跟datatable差不多,尤其是结构上,下面是我项目中的一段详细代码:
if(lblWarehouseId.Text == "")//添加
...{
if(ViewState["WarehousePresent"] == null)//判断当前页面的viewstate状态,如果是null,就向里面添加一条,如果不为null,就向里面续加一条
...{
//DataTable dt = new DataTable();
dt.Columns.Add("WarehousePresentId");//这个dt是在这段代码上面声明的
dt.Columns.Add("FullName");
dt.Columns.Add("AbbrName");
dt.Columns.Add("PresentType");
dt.Columns.Add("CurrentPrice");
dt.Columns.Add("SalePrice");
dt.Columns.Add("OrderQuantity");
DataRow dr = dt.NewRow();//声明一行
dr["WarehousePresentId"] = int.Parse(ucWarehousePresent.WarehousePresentList.SelectedValue);;
dr["FullName"] = ucWarehousePresent.WarehousePresentList.SelectedItem.ToString();
dr["AbbrName"] = txtAbbrName.Text.Trim();
dr["PresentType"] = txtPresentType.Text.Trim();
dr["CurrentPrice"] = txtCurrentPrice.Text.Trim();
dr["SalePrice"] = txtSalePrice.Text.Trim();
dr["OrderQuantity"] = txtOrderQuantity.Text.Trim();
dt.Rows.Add(dr);//添加行
ViewState["WarehousePresent"] = dt;把dt赋值给viewstate
dgOrderList_Present_WarehouseBind();
}
else//向viewstate里续加一行
...{
//DataTable dt = new DataTable();
dt = (DataTable)ViewState["WarehousePresent"];
DataRow dr = dt.NewRow();
dr["WarehousePresentId"] = int.Parse(ucWarehousePresent.WarehousePresentList.SelectedValue);;
dr["FullName"] = ucWarehousePresent.WarehousePresentList.SelectedItem.ToString();
dr["AbbrName"] = txtAbbrName.Text.Trim();
dr["PresentType"] = txtPresentType.Text.Trim();
dr["CurrentPrice"] = txtCurrentPrice.Text.Trim();
dr["SalePrice"] = txtSalePrice.Text.Trim();
dr["OrderQuantity"] = txtOrderQuantity.Text.Trim();
dt.Rows.Add(dr);
dgOrderList_Present_WarehouseBind();
}
}
本文介绍了一种在ASP.NET中利用ViewState来临时保存订单信息的方法。这种方法允许在不直接操作数据库的情况下逐步构建订单详情,直至所有信息准备完毕后再统一存入数据库。通过具体的代码示例展示了如何根据ViewState的状态进行数据的添加或追加。
1万+

被折叠的 条评论
为什么被折叠?



