我有文本框控制&一个按钮,在文本框中放入值后&点击按钮数据应该添加到数据表中。
我面临的问题是,当我添加新记录时,之前的记录已经消失,&新记录取代旧记录。
我知道,我在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 = "";
}
答案 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();
}