在Windows应用程序中将数据表值一个位置移动到另一个位置

时间:2013-12-02 14:54:37

标签: c# asp.net windows-applications

我有文本框控制&一个按钮,在文本框中放入值后&点击按钮数据应该添加到数据表中。

我面临的问题是,当我添加新记录时,之前的记录已经消失,&新记录取代旧记录。

我知道,我在Windows应用程序中使用的是将数据传输到另一个地方。我们在WebApplication中使用的[viewstate],但是对于窗口应用程序要做什么

在此代码中,它只在表中添加一条记录,当我尝试添加第二条记录时,它会替换旧记录。

我的代码是:

public void Getdatatable(int srno, string Name, string address, int contactno,double amount,string Emailid)
{

    try 
    {
         dt = new DataTable();
        DataRow dr;

            dt.Columns.Add(new System.Data.DataColumn("SrNo", typeof(int)));
            dt.Columns.Add(new System.Data.DataColumn("Name", typeof(string)));
            dt.Columns.Add(new System.Data.DataColumn("address", typeof(string)));
            dt.Columns.Add(new System.Data.DataColumn("ContactNo", typeof(int)));
            dt.Columns.Add(new System.Data.DataColumn("amount", typeof(double)));
            dt.Columns.Add(new System.Data.DataColumn("Emailid", typeof(string)));
            dr = dt.NewRow();


            dr[0] = srno;
            dr[1] = Name;
            dr[2] = address;
            dr[3] = contactno;
            dr[4] = amount;
            dr[5] = Emailid;

            dt.Rows.Add(dr);
        }
        catch(Exception ex)
        {}    
}

private void btnadd_Click(object sender, EventArgs e)
{
    srno =Convert.ToInt32(txtsrno.Text);
    Name = txtname.Text;
    address = txtaddress.Text;
    contactno =Convert.ToInt32(txtcontact.Text);
    amount =Convert.ToDouble(txtamount.Text);
    Emailid = txtemail.Text;

    Getdatatable(srno, Name, address, contactno, amount, Emailid);
    //dt = ds.Tables[0].Rows[0][0];
    foreach (DataRow dr in dt.Rows)
    {

                dr[0] = txtsrno.Text;
                dr[1] = txtname.Text;
                dr[2] = txtaddress.Text;
                dr[3] = txtcontact.Text;
                dr[4] = txtamount.Text;
                dr[5] = txtemail.Text;

    }
    dt.AcceptChanges();
    grd.DataSource = dt;

    txtsrno.Text = "";
    txtname.Text = "";
    txtaddress.Text = "";
    txtcontact.Text = "";
    txtamount.Text = "";
    txtemail.Text = "";            
}

2 个答案:

答案 0 :(得分:0)

嗯......您的Getdatatable方法正在创建一个新表。 由于您在Click回调中调用此方法,因此每次都会重新创建表。因此,您只能添加最后一个元素。

您应该创建一次表并删除Getdatatable(srno,名称,地址,contactno,金额,Emailid);从您的按钮回拨中拨打电话。

答案 1 :(得分:0)

您可以将DataTable dt声明为全局变量,并在加载表单时向其添加一列。

private DataTable dt = null;

private void CreateTable() 
{
    dt = new DataTable();

    dt.Columns.Add(new System.Data.DataColumn("SrNo", typeof(int)));
    dt.Columns.Add(new System.Data.DataColumn("Name", typeof(string)));
    dt.Columns.Add(new System.Data.DataColumn("address", typeof(string)));
    dt.Columns.Add(new System.Data.DataColumn("ContactNo", typeof(int)));
    dt.Columns.Add(new System.Data.DataColumn("amount", typeof(double)));
    dt.Columns.Add(new System.Data.DataColumn("Emailid", typeof(string)));
}

private void Form1_Load(object sender, EventArgs e)
{
    CreateTable();
}

调用CreateTable方法后,您将拥有包含所需列的数据表,并且在尝试将数据行添加到数据表时无需再次调用此方法。

这是按钮点击事件处理程序

private void ClearTextBox() 
{
    txtsrno.Text = "";
    txtname.Text = "";
    txtaddress.Text = "";
    txtcontact.Text = "";
    txtamount.Text = "";
    txtemail.Text = "";      
}

private void btnadd_Click(object sender, EventArgs e)
{
    try
    {
        srno = Convert.ToInt32(txtsrno.Text);
        Name = txtname.Text;
        address = txtaddress.Text;
        contactno = Convert.ToInt32(txtcontact.Text);
        amount = Convert.ToDouble(txtamount.Text);
        Emailid = txtemail.Text;

        DataRow dr = dt.NewRow();
        dr[0] = srno;
        dr[1] = Name;
        dr[2] = address;
        dr[3] = contactno;
        dr[4] = amount;
        dr[5] = Emailid;

        dt.Rows.Add(dr);

        dt.AcceptChanges();
        grd.DataSource = dt;

        ClearTextBox();
    }
    catch (Exception ex) { /*Handle Exception*/ } 
}

否则,您不需要使用那些TextBox和按钮将数据添加到数据表。你只需这样编码,直接在DataGridView单元格中输入数据(比如编辑excel文件时)。

private DataTable dt = null;

private void CreateTable() 
{
    dt = new DataTable();

    dt.Columns.Add(new System.Data.DataColumn("SrNo", typeof(int)));
    dt.Columns.Add(new System.Data.DataColumn("Name", typeof(string)));
    dt.Columns.Add(new System.Data.DataColumn("address", typeof(string)));
    dt.Columns.Add(new System.Data.DataColumn("ContactNo", typeof(int)));
    dt.Columns.Add(new System.Data.DataColumn("amount", typeof(double)));
    dt.Columns.Add(new System.Data.DataColumn("Emailid", typeof(string)));

    grd.DataSource = dt;
}

private void Form1_Load(object sender, EventArgs e)
{
    CreateTable();
}