数据表被覆盖

时间:2014-05-28 13:29:39

标签: c# asp.net datatable

在ASP.NET项目中,我有2个文本框和一个提交按钮。

在单击按钮的事件处理程序中,我想将文本框的值保存到数据表中,然后将数据表绑定到Gridview。

这必须多次发生。但每次数据表都有一行时,就像每次事件处理程序触发时都被覆盖一样。就像每次事件处理程序触发时从头开始创建数据表一样。代码如下。谢谢你的时间。

编辑:感谢您提供的所有答案。

      protected void BtnInsertCustomerLegalRelationsInsert_Click(object sender, EventArgs e)
      {
        string FullCompanyName = TbxFullCompanyName.Text.Trim();
        object LegalRelationAfm = TbxLegalRelationAfm.Text.Trim();
        if (dtCustomersLegalRelations.Columns.Count == 0)
        {
            dtCustomersLegalRelations.Columns.Add("FullCompanyName",typeof(string));
            dtCustomersLegalRelations.Columns.Add("LegalRelationAfm",typeof(string));
        }
        DataRow dr = dtCustomersLegalRelations.NewRow();
        dr["FullCompanyName"] = FullCompanyName;
        dr["LegalRelationAfm"] = LegalRelationAfm;
        dtCustomersLegalRelations.Rows.Add(dr);            
        GvCustomerRegalRelations.DataSource = dtCustomersLegalRelations;
        GvCustomerRegalRelations.DataBind();
       }

这里背后的整个代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class ConnectedBorrowers_CustomerBasicInput : System.Web.UI.UserControl
{
    DataTable dtCustomersLegalRelations = new DataTable();   

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {            
            TrLegalRelations1.Visible = TrLegalRelations2.Visible = TrLegalRelations3.Visible = false;
        }
    }

    protected void CbMandatoryAFM_CheckedChanged(object sender, EventArgs e)
    {
        if (CbMandatoryAFM.Checked == true)
        {
            TbxCustAfm.ReadOnly = true;
            TbxCustAfm.BackColor = Color.LightGray;
        }
        else
        {
            TbxCustAfm.ReadOnly = false;
            TbxCustAfm.BackColor = Color.White;            
        }
    }

    protected void CbLegalRelationsMandatoryAFM_CheckedChanged(object sender, EventArgs e)
    {
        if (CbLegalRelationsMandatoryAFM.Checked == true)
        {
            TbxLegalRelationAfm.ReadOnly = true;
            TbxLegalRelationAfm.BackColor = Color.LightGray;
        }
        else
        {
            TbxLegalRelationAfm.ReadOnly = false;
            TbxLegalRelationAfm.BackColor = Color.White;
        }
    }

    protected void CbLegalRelations_CheckedChanged(object sender, EventArgs e)
    {
        if (CbLegalRelations.Checked == true)
        {
            TrLegalRelations1.Visible = TrLegalRelations2.Visible = TrLegalRelations3.Visible = true;            
        }
        else
        {
            TrLegalRelations1.Visible = TrLegalRelations2.Visible = TrLegalRelations3.Visible = false; 
        }
    }

    protected void BtnInsertCustomerLegalRelationsInsert_Click(object sender, EventArgs e)
    {
        try
        {
            string FullCompanyName = TbxFullCompanyName.Text.Trim();
            object LegalRelationAfm = TbxLegalRelationAfm.Text.Trim();
            if (dtCustomersLegalRelations.Columns.Count == 0)
            {
                dtCustomersLegalRelations.Columns.Add("FullCompanyName",typeof(string));
                dtCustomersLegalRelations.Columns.Add("LegalRelationAfm",typeof(string));
            }
            DataRow dr = dtCustomersLegalRelations.NewRow();
            dr["FullCompanyName"] = FullCompanyName;
            dr["LegalRelationAfm"] = LegalRelationAfm;
            dtCustomersLegalRelations.Rows.Add(dr);            
            GvCustomerRegalRelations.DataSource = dtCustomersLegalRelations;
            GvCustomerRegalRelations.DataBind();
        }
        catch (Exception ex)
        {
            ((Label)this.Page.Master.FindControl("LblError")).Text = ex.Message;
        }
    }

4 个答案:

答案 0 :(得分:1)

尝试这样的方法:

public partial class ConnectedBorrowers_CustomerBasicInput : System.Web.UI.UserControl
{
    DataTable dtCustomersLegalRelations;   

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {            
            dtCustomersLegalRelations = new DataTable(); 
            Session["table"] = dtCustomersLegalRelations;  
            TrLegalRelations1.Visible = TrLegalRelations2.Visible = TrLegalRelations3.Visible = false;
        } else {
             dtCustomersLegalRelations = Session["table"] as DataTable;
        }
    }

  ...

}

答案 1 :(得分:1)

' dtCustomersLegalRelations'不会在PostBack事件中持续存在 - 因此当您在其末尾添加行时,您将在新实例上执行此操作。

在添加新行并重新绑定之前,您需要从GridView中取回所有数据。

st4hoo上面的答案应该为你排序。

答案 2 :(得分:1)

当你点击按钮回发时。在每次回发期间,您的数据表从头开始创建。所以你将丢失你的旧数据。 因此,一个选项是,您可以在会话中保留数据表中的数据,并在下一次按钮单击期间从会话中检索数据表并添加新行。

答案 3 :(得分:-1)

您在什么时候创建数据表(dtCustomersLegalRelations)?你能粘贴完整的代码,包括数据表的cration和button_click吗?

相关问题