用asp2.0在做一个项目管理的东西,其中一个页面做项目参加人员的信息。 用一个临时的DataTable保存,用GridView来显示。在页面load的时候写了段函数到数据库中取出参加人员信息表的结构。
在页面中通过多个TextBox输入一个参加人员的各个信息,最终点击一个保存按钮把这个人的信息作为一行记录增加到这个临时的DataTable中。现在问题是每点击一次按钮就走一次PageLoad事件。每次都把临时的DataTable刷新一次。 我该如何解决这个问题? 或是我的方法有问题。 请大家帮看一下。

解决方案 »

  1.   

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        If IsPostBack = False Then
                 'Fill DataTable
            End If    End Sub
      

  2.   

    在Page_Load事件中用 IsPostBack 属性来判断页面是否被回传!
      

  3.   

    Private DT_ZSCQ As New DataTable   //这是定义的临时表
    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
      

  4.   

    应该就是ISPOSTBACK那里出了问题.个人意见.楼主不忙在那调试一下.
      

  5.   

    你定义的DataTable在每一次请求的时候都会生成新的。因为Http协议,在请求相应之后就会断开连接,这时候继承Page类的Form实例就会销毁DataTable也就被销毁了~
      

  6.   

    在ASP.NET中是不能声明1个类的全局变量的。Private DT_ZSCQ As New DataTable
    这样声明是没有意义的,你在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中
      

  7.   

    我认为保存在session里比较好DataTable categoryTable;
            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;
      

  8.   

    BearRui(孤熊 | 带你去看海!) 的方法切实可行
    如果表比较小,可以考虑存放在session获viewstate中,如果比较大,可以考虑再在数据库中建临时表的方法
      

  9.   

    看来我用的方法从开始就是错误的。 多谢大家帮忙。 我可以改用Session,但Viewstate如何用,有什么优点。再一个  改为静态的 Private Static DT_ZSCQ As New DataTable  这个是怎么回事? 我定义了这个但是语法不通过。 我用的是VB。
      

  10.   

    静态的用Public
    就是一个类中只有一个静态的对象,不用实例化,直接用类名.静态对象名调用
      

  11.   

    如果表不是很大,可以放在cache里,如果表比较大,可以保存在session里,以节约内存。