【问题标题】:NewRow() Method overwritting previous rowNewRow() 方法覆盖前一行
【发布时间】:2017-11-19 02:46:52
【问题描述】:

我有一个将行添加到数据表中的表单。所以我创建了数据表:

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();

    }
}

【问题讨论】:

    标签: c# asp.net gridview datatable newrow


    【解决方案1】:

    你这样做:

    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 中添加行

    【讨论】:

    • 这个是对的,刚刚试了一下,效果很好。我唯一改变的是我在页面加载之外声明了数据表。非常感谢您的帮助
    【解决方案2】:

    回发之间不会保留变量,每次Page_Load 都会重新初始化您的DataTable

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

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2014-12-22
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多