想实现这么种效果:
在若干干控件输入、选择数据后,点击“添加”按钮,将这条记录添加并显示在datagridview中
继续往上面的控件输入、选择数据后,再点击“添加”按钮,将新的记录追加并显示在同一datagridview中,如此反复操作,直到要输入的记录都输入完
接着点击“提交”按钮,将显示在datagridview里的几行记录都添加到数据库里。不敢奢要代码,希望大家给个思路,或者提供关键代码。谢谢先
在若干干控件输入、选择数据后,点击“添加”按钮,将这条记录添加并显示在datagridview中
继续往上面的控件输入、选择数据后,再点击“添加”按钮,将新的记录追加并显示在同一datagridview中,如此反复操作,直到要输入的记录都输入完
接着点击“提交”按钮,将显示在datagridview里的几行记录都添加到数据库里。不敢奢要代码,希望大家给个思路,或者提供关键代码。谢谢先
然后再从dataGridView里读出数据,存入数库,这个用循环很方便,我用的是ListVIew控件,不过方式一样的,
1、先通过DataGridViewColumn对象给DataGridView添加列,再通过DataGridViewRow对象添加行。2、让DataGridView绑定一内存DataTable,添加记录直接往DataTable写,再绑回DataGridView。
DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex];
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
dataGridView1.Rows.Add();
dataGridView1.Rows.Add();
DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex-1];
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
DataGridViewRow dgr= dataGridView1.Rows[0].Clone() as DataGridViewRow;
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
dataGridView1.Rows.Add(dgr);
在更新到数据库中去
首先选把你要绑定到datagridview上的数据用DataTable接受
然后和datagridview绑定,绑定后对datagridview进行操作,也就是对DataTable操作,
然后把DataTable保存到数据库中.
DataTable只适合单表,多张表就不可以了.
看看我的blog
http://blog.csdn.net/hkdeaccp
添加按钮:DataRow dr=dt.NewRow();
dr["字段"]=值
...........
...........
dt.Rows.Add(dr);
dgv.DataSource=dt;//把新行添加到datatable,此时数据都存在缓存里
提交按钮:SqlDataAdapter1.Update(dt);//更新数据库
假定你的是一个产品,那么定义一个产品管理者,P_Manager来操作数据库,一个产品类(对象)P_Class(包括名字,规格等)
再用泛型,List<P_Class> 把产品对象P_Class加进去,例,
List<P_Class> ListP_Class=null; P_Class_=new P_Class(Name,Memo)
ListP_Class.add(P_Class) 这样输入一个就在listP_Class中保存了,但没有直接加入到数据库,再把listP_Class显示到GridView中,
在需要保存的时候用P_Manager来把listP_Class加入到数据库就成了.ListP_Class有Count的属性,这样就以全部保存进去,而且数据分明,List中有几个P_Class也很清楚.
sqldataadapter da = new sqldataadapter(sql,cn);
da.fill(dt);
那么这个sql语句写什么好?初始状态下datatable应该没有任何数据的。
{
using (SqlConnection cn = new SqlConnection(mysettings.Localsql))
{
cn.Open();
//创建表中各个字段
DataTable dt = new DataTable();
DataColumn colprogram = dt.Columns.Add("栏目",System.Type.GetType("System.String"));
DataColumn coltapecode = dt.Columns.Add("磁带编号", System.Type.GetType("System.String"));
DataColumn coldept = dt.Columns.Add("创作部门", System.Type.GetType("System.String"));
//创建一个DataRow对象
DataRow dr = dt.NewRow();
dr[0] = progcomboBox.Text;
dr[1] = tapecodetextBox.Text;
dr[2] = deptcomboBox.Text;
dt.Rows.Add(dr);
bindingSource1.DataSource = dt;
}
}另外datagridview控件的datasource设置为bindingsource1,列名直接在设计器里添加了,测试的结果是点了按钮后datagridview加了一空行,且再点按钮就不再增加行了,哪错了呢?
bindingSource1.DataBind()
datagridview
datset
sqldataAdapter
datesource
sqlCommandbuilder
sqlCommand绑定到Dgv
ds.tables["表名"]
ds.change()
getchange()就这么弄
{
// TODO: 这行代码将数据加载到表“deptDataSet.tdept”中。您可以根据需要移动或移除它。
this.tdeptTableAdapter.Fill(this.deptDataSet.tdept);
// TODO: 这行代码将数据加载到表“tapetypeDataSet.ttapetype”中。您可以根据需要移动或移除它。
this.ttapetypeTableAdapter.Fill(this.tapetypeDataSet.ttapetype);
// TODO: 这行代码将数据加载到表“progDataSet.tprogram”中。您可以根据需要移动或移除它。
this.tprogramTableAdapter.Fill(this.progDataSet.tprogram);
progcomboBox.Text = "";
tapetypecomboBox.Text = "";
deptcomboBox.Text = "";
//创建表中各个字段
initDataTable();
bindGrid();
}
//添加磁带详细节目
private void addBtn_Click(object sender, EventArgs e)
{
if (progcomboBox.Text == "")
{
MessageBox.Show("请选择栏目", "友情提醒");
return;
}
if (tapecodetextBox.Text == "")
{
MessageBox.Show("请输入磁带编号", "友情提醒");
return;
}
using (SqlConnection cn = new SqlConnection(mysettings.Localsql))
{
cn.Open();
//创建一个DataRow对象
DataRow dr = dt.NewRow();
dr[0] = progcomboBox.Text;
dr[1] = tapecodetextBox.Text;
dr[2] = deptcomboBox.Text;
dr[3] = tapetypecomboBox.Text;
dr[4] = putdate.Text;
dr[5] = stacktextBox.Text;
dr[6] = shelftextBox.Text;
dr[7] = rowtextBox.Text;
dr[8] = columntextBox.Text;
dt.Rows.Add(dr);
bindingSource1.DataSource = dt;
}
}
//初始化datatable各字段
private void initDataTable()
{
DataColumn colprogram = dt.Columns.Add("program", System.Type.GetType("System.String"));
DataColumn coltapecode = dt.Columns.Add("tapecode", System.Type.GetType("System.String"));
DataColumn coldept = dt.Columns.Add("department", System.Type.GetType("System.String"));
DataColumn coltapetype = dt.Columns.Add("tapetype", System.Type.GetType("System.String"));
DataColumn colpubdate = dt.Columns.Add("pubdate", System.Type.GetType("System.String"));
DataColumn colstack = dt.Columns.Add("stack", System.Type.GetType("System.String"));
DataColumn colshelft = dt.Columns.Add("shelf", System.Type.GetType("System.String"));
DataColumn colrow = dt.Columns.Add("row", System.Type.GetType("System.String"));
DataColumn colcolumn = dt.Columns.Add("column", System.Type.GetType("System.String"));
}
//设计datagridview
private void bindGrid()
{
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
DataGridViewTextBoxColumn col_prog = new DataGridViewTextBoxColumn();
col_prog.DataPropertyName = "program";
col_prog.HeaderText = "栏目";
col_prog.Name = "program";
col_prog.ReadOnly = true;
col_prog.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_prog);
DataGridViewTextBoxColumn col_tapecode = new DataGridViewTextBoxColumn();
col_tapecode.DataPropertyName = "tapecode";
col_tapecode.HeaderText = "磁带编号";
col_tapecode.Name = "tapecode";
col_tapecode.ReadOnly = true;
col_tapecode.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_tapecode);
DataGridViewTextBoxColumn col_dept = new DataGridViewTextBoxColumn();
col_dept.DataPropertyName = "department";
col_dept.HeaderText = "制作部门";
col_dept.Name = "department";
col_dept.ReadOnly = true;
col_dept.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_dept);
DataGridViewTextBoxColumn col_tapetype = new DataGridViewTextBoxColumn();
col_tapetype.DataPropertyName = "tapetype";
col_tapetype.HeaderText = "磁带类型";
col_tapetype.Name = "tapetype";
col_tapetype.ReadOnly = true;
col_tapetype.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_tapetype);
DataGridViewTextBoxColumn col_pubdate = new DataGridViewTextBoxColumn();
col_pubdate.DataPropertyName = "pubdate";
col_pubdate.HeaderText = "播出日期";
col_pubdate.Name = "pubdate";
col_pubdate.ReadOnly = true;
col_pubdate.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_pubdate);
DataGridViewTextBoxColumn col_stack = new DataGridViewTextBoxColumn();
col_stack.DataPropertyName = "stack";
col_stack.HeaderText = "库号";
col_stack.Name = "stack";
col_stack.ReadOnly = true;
col_stack.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_stack);
DataGridViewTextBoxColumn col_shelf = new DataGridViewTextBoxColumn();
col_shelf.DataPropertyName = "shelf";
col_shelf.HeaderText = "架号";
col_shelf.Name = "shelf";
col_shelf.ReadOnly = true;
col_shelf.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_shelf);
DataGridViewTextBoxColumn col_row = new DataGridViewTextBoxColumn();
col_row.DataPropertyName = "row";
col_row.HeaderText = "行号";
col_row.Name = "row";
col_row.ReadOnly = true;
col_row.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns.Add(col_row);
DataGridViewTextBoxColumn col_column = new DataGridViewTextBoxColumn();
col_column.DataPropertyName = "column";
col_column.HeaderText = "列号";
col_column.Name = "column";
col_column.ReadOnly = true;
col_column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView1.Columns.Add(col_column);
}
就是添加按钮时:DataRow dr=dt.NewRow();
dr["字段"]=值
...........
...........
dt.Rows.Add(dr);
然后更新 SqlDataAdapter1.Update(dt)更新到数据库即可,然后dt.acceptchanges()不需要绑来绑去的