2017-06-16 93 views
0

我有一个将行添加到数据表中的表单。所以我创建数据表:NewRow()覆盖前一行的方法

DataTable vendas = new DataTable(); 

然后在Page_Load中它创建的列:

vendas.Columns.Add("Nome"); 
vendas.Columns.Add("Morada"); 
vendas.Columns.Add("Contribuinte"); 
vendas.Columns.Add("CC"); 
vendas.Columns.Add("Email"); 
vendas.Columns.Add("Agregado"); 
vendas.Columns.Add("Banco"); 
vendas.Columns.Add("IBAN"); 
vendas.Columns.Add("Produtos"); 

然后提交表单内(按钮动作),它增加了表单值作为新行和它们绑定到GridView:

protected void x(object sender, EventArgs e) 
{ 
    DataRow venda = vendas.NewRow(); 
    venda["Nome"] = nomecliente; 
    venda["Morada"] = moradacliente; 
    venda["Contribuinte"] = contribuintecliente; 
    venda["CC"] = cccliente; 
    venda["Email"] = mailcliente; 
    venda["Agregado"] = agregadocliente; 
    venda["Banco"] = bancocliente; 
    venda["IBAN"] = ibancliente; 
    venda["Produtos"] = produtocliente; 

    vendas.Rows.Add(venda); 

    GridviewVendas.DataSource = vendas; 
    GridviewVendas.DataBind(); 
} 

什么寿发生的事情是,每次运行时,它会覆盖而不是添加一个新的前一行最后这个方法。我做错了什么,这可能是一个愚蠢的错误,但我只是没有看到它。

编辑:这是所有在一个:

public partial class _Default : System.Web.UI.Page 
{ 
    public string nome; 
    public string planosaudeantigo; 
    public string valorplanosaudeantigo; 
    public string condicoesplanosaudeantigo; 
    public string stringagregadofamiliar; 
    public string nomecliente; 
    public string moradacliente; 
    public string contribuintecliente; 
    public string cccliente; 
    public string mailcliente; 
    public string agregadocliente; 
    public string bancocliente; 
    public string ibancliente; 
    public string produtocliente; 
    DataTable vendas = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     vendas.Columns.Add("Nome"); 
     vendas.Columns.Add("Morada"); 
     vendas.Columns.Add("Contribuinte"); 
     vendas.Columns.Add("CC"); 
     vendas.Columns.Add("Email"); 
     vendas.Columns.Add("Agregado"); 
     vendas.Columns.Add("Banco"); 
     vendas.Columns.Add("IBAN"); 
     vendas.Columns.Add("Produtos"); 
    } 

    protected void InserirVenda_Click(object sender, EventArgs e) 
    { 
     nomecliente = NomeCliente.Text; 
     moradacliente = MoradaCliente.Text; 
     contribuintecliente = ContribuinteCliente.Text; 
     cccliente = CCCliente.Text; 
     mailcliente = MailCliente.Text; 
     agregadocliente = AgregadoCliente.Text; 
     bancocliente = BancoCliente.Text; 
     ibancliente = IbanCliente.Text; 

     for (int i = 0; i < ProdutosCliente.Items.Count; i++) 
     { 
      if (ProdutosCliente.Items[i].Selected) 
      { 
       produtocliente += ProdutosCliente.Items[i].Value + ","; 
      } 
     } 

     DataRow venda = vendas.NewRow(); 
     venda["Nome"] = nomecliente; 
     venda["Morada"] = moradacliente; 
     venda["Contribuinte"] = contribuintecliente; 
     venda["CC"] = cccliente; 
     venda["Email"] = mailcliente; 
     venda["Agregado"] = agregadocliente; 
     venda["Banco"] = bancocliente; 
     venda["IBAN"] = ibancliente; 
     venda["Produtos"] = produtocliente; 

     vendas.Rows.Add(venda); 

     GridviewVendas.DataSource = vendas; 
     GridviewVendas.DataBind(); 

    } 
} 

回答

0

你不喜欢这样:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //check if it is a postback 
    if (!Page.IsPostBack) 
    { 
     //create a new table 
     DataTable vendas = new DataTable(); 

     //add some columns 
     vendas.Columns.Add("Nome"); 
     vendas.Columns.Add("Morada"); 

     //add the datatable to the viewstate 
     ViewState["vendas"] = vendas; 
    } 
    else 
    { 
     //check if the viewstate exits and cast it back to a datatable 
     if (ViewState["vendas"] != null) 
     { 
      vendas = ViewState["vendas"] as DataTable; 
     } 
    } 
} 

现在你可以继续添加行中InserirVenda_Click

+0

这是正确的,只是尝试它和它的作品。我改变的唯一的事情是我在页面加载之外声明Datatable。十分感谢你的帮助 – Mike3645

0

的变量不回发之间依然存在,您DataTable被重新初始化每次Page_Load时间。

您可以使用Session变量或cookie来保存您的数据。