用asp2.0在做一个项目管理的东西,其中一个页面做项目参加人员的信息。 用一个临时的DataTable保存,用GridView来显示。在页面load的时候写了段函数到数据库中取出参加人员信息表的结构。
在页面中通过多个TextBox输入一个参加人员的各个信息,最终点击一个保存按钮把这个人的信息作为一行记录增加到这个临时的DataTable中。现在问题是每点击一次按钮就走一次PageLoad事件。每次都把临时的DataTable刷新一次。 我该如何解决这个问题? 或是我的方法有问题。 请大家帮看一下。
在页面中通过多个TextBox输入一个参加人员的各个信息,最终点击一个保存按钮把这个人的信息作为一行记录增加到这个临时的DataTable中。现在问题是每点击一次按钮就走一次PageLoad事件。每次都把临时的DataTable刷新一次。 我该如何解决这个问题? 或是我的方法有问题。 请大家帮看一下。
'Fill DataTable
End If End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then //这是在页面load的时候获取临时表格式的代码
DT_ZSCQ = CSB.Get_ZSCQ_Format(ConnStr).Tables(0)
GridView1.DataSource = DT_ZSCQ
GridView1.DataBind()
End If
End Sub
//这是保存事件
Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim NewRow As DataRow
NewRow = DT_ZSCQ.NewRow
NewRow.Item("gb") = TextBox1.Text
NewRow.Item("zlh") = TextBox2.Text
NewRow.Item("zlmc") = TextBox3.Text
NewRow.Item("zscq") = TextBox4.Text
DT_ZSCQ.Rows.Add(NewRow)
GridView1.DataSource = DT_ZSCQ
GridView1.DataBind()
End Sub
这样声明是没有意义的,你在NewRow = DT_ZSCQ.NewRow这里中断监视下就知道。
DT_ZSCQ并不是CSB.Get_ZSCQ_Format(ConnStr).Tables(0),而只是个New DataTable。
就是说你这样声明是不会在内存中保存DT_ZSCQ的。修改方法:
1、可以改为静态的 Private Static DT_ZSCQ As New DataTable
2、比较好点的是保存到session或viewstate中
if (Session["category"] != null)
{
categoryTable = Session["category"] as DataTable; }
else
{
categoryTable = new DataTable();
categoryTable.Columns.Add("id", typeof(int));
categoryTable.Columns["id"].AutoIncrement = true;
categoryTable.Columns["id"].AutoIncrementSeed = 0;
categoryTable.Columns.Add("co_code");//企业编号
categoryTable.Columns.Add("category_manager_id");//商品管理编号
categoryTable.Columns.Add("category_id");//商品编号
categoryTable.Columns.Add("china_name");//商品中文名称
categoryTable.Columns.Add("english_name");//商品英文名称
categoryTable.Columns.Add("dicription");//商品描述
categoryTable.Columns.Add("country");//原产国
categoryTable.Columns.Add("price");//单价
categoryTable.Columns.Add("money");//币制
categoryTable.Columns.Add("re");//备注
categoryTable.Columns.Add("type");//规格型号
categoryTable.Columns.Add("put_unit");//备案计量单位
categoryTable.Columns.Add("law_unit");//法定计量单位
categoryTable.Columns.Add("upload_image",typeof(HttpPostedFile));//图片
}
DataRow dr = categoryTable.NewRow();
dr["co_code"] = textboxCoCode.Text;
dr["category_manager_id"] = textboxCategoryManagerId.Text;
dr["category_id"] = textboxCategoryId.Text;
dr["china_name"] = textboxChinaName.Text;
dr["english_name"] = textboxEnglishName.Text;
dr["dicription"] = textboxDiscription.Text;
dr["country"] = dropdownlistCountry.SelectedValue;
dr["price"] = textboxPrice.Text;
dr["money"] = dropdownlistMoney.SelectedValue;
dr["re"] = textboxRe.Text;
dr["type"] = textboxType.Text;
dr["put_unit"] = textboxPutUnit.Text;
dr["law_unit"] = textboxLawUnit.Text;
dr["upload_image"] = fileuploadImage.PostedFile;
categoryTable.Rows.Add(dr);
gridviewCategory.DataSource = categoryTable;
gridviewCategory.DataBind();
Session["category"] = categoryTable;
如果表比较小,可以考虑存放在session获viewstate中,如果比较大,可以考虑再在数据库中建临时表的方法
就是一个类中只有一个静态的对象,不用实例化,直接用类名.静态对象名调用