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();
}
}
2 ответа
Вы делаете это так:
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
Переменные не сохраняются между постбэками, ваши DataTable
переинициализируется каждый раз Page_Load
,
Ты можешь использовать Session
переменные или куки для сохранения ваших данных.