求先一行一行填充datagridview,最后一起提交数据库添加记录的解决思路

angleoldhen 2008-01-08 09:26:46
想实现这么种效果:
在若干干控件输入、选择数据后,点击“添加”按钮,将这条记录添加并显示在datagridview中
继续往上面的控件输入、选择数据后,再点击“添加”按钮,将新的记录追加并显示在同一datagridview中,如此反复操作,直到要输入的记录都输入完
接着点击“提交”按钮,将显示在datagridview里的几行记录都添加到数据库里。

不敢奢要代码,希望大家给个思路,或者提供关键代码。谢谢先
...全文
1773 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
小布叮 2011-07-28
  • 打赏
  • 举报
回复
帮我回答一下。。http://topic.csdn.net/u/20110728/10/87c0dedd-ef46-48cd-85df-49c87c5523e1.html c# 将dgv的行存储到另一dgv里面
小布叮 2011-07-28
  • 打赏
  • 举报
回复
我也在找类似的实现。。。教教我吧。。不过我的是不同的两个DGV
hkdeaccp 2008-01-09
  • 打赏
  • 举报
回复
给你个思路
首先选把你要绑定到datagridview上的数据用DataTable接受
然后和datagridview绑定,绑定后对datagridview进行操作,也就是对DataTable操作,
然后把DataTable保存到数据库中.
DataTable只适合单表,多张表就不可以了.
看看我的blog
http://blog.csdn.net/hkdeaccp
zhouxian0518 2008-01-09
  • 打赏
  • 举报
回复
先保存在datatable中
在更新到数据库中去
九章落地 2008-01-09
  • 打赏
  • 举报
回复
楼主你添加的方式不对.


DataGridViewRow dgr= dataGridView1.Rows[0].Clone() as DataGridViewRow;
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
dataGridView1.Rows.Add(dgr);

zzjml168a 2008-01-09
  • 打赏
  • 举报
回复
应该这样吧:
dataGridView1.Rows.Add();
DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex-1];
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
JCrazy 2008-01-09
  • 打赏
  • 举报
回复
其实这是一个非常简单的问题,首先在展示时对这个datagridview进行数据绑定,即datagridview1.datasource =dt; 因为这个是双向绑定的,所以我们只要对数据源的增删改(即对dt进行操作),会反映到datagridview中,
就是添加按钮时:DataRow dr=dt.NewRow();
dr["字段"]=值
...........
...........
dt.Rows.Add(dr);
然后更新 SqlDataAdapter1.Update(dt)更新到数据库即可,然后dt.acceptchanges()

不需要绑来绑去的
angleoldhen 2008-01-09
  • 打赏
  • 举报
回复
现在还没到批量添加到数据库那一步呢,只是将记录手动添加到datagridview的行 就卡住了。
chengqscjh 2008-01-09
  • 打赏
  • 举报
回复
你可以参考dataGridView批量操作写法
angleoldhen 2008-01-09
  • 打赏
  • 举报
回复
我是这么写的,为什么添加到datagridview的数据只显示到带 * 的那行,而且只显示新加的记录,前面加的都成空行了
[code=c#]
DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex];
dgr.Cells[0].Value = progcomboBox.Text;
dgr.Cells[1].Value = tapecodetextBox.Text;
dataGridView1.Rows.Add();
[/code]
angleoldhen 2008-01-09
  • 打赏
  • 举报
回复
目的已基本实现,代码如下:

private void tapein_Load(object sender, EventArgs e)
{
// 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);
}

九章落地 2008-01-09
  • 打赏
  • 举报
回复
有两法子:
1、先通过DataGridViewColumn对象给DataGridView添加列,再通过DataGridViewRow对象添加行。

2、让DataGridView绑定一内存DataTable,添加记录直接往DataTable写,再绑回DataGridView。
hapen_zhang 2008-01-09
  • 打赏
  • 举报
回复
先new一个DataGridViewRow,然后调用datagridview实例Rows.Add函数
  • 打赏
  • 举报
回复
你不用往dataGridView里直接添加,你可以直接往一个DataSet的表里添加,然后绑定数据,提交的时候就用SqlDataAdapter 的Update 方法把数据提交就可以了。这样就直接将所有新增加的插入到数据库里了。
angleoldhen 2008-01-09
  • 打赏
  • 举报
回复
不绑定添加行的那句怎么写啊?
yilanwuyu123 2008-01-09
  • 打赏
  • 举报
回复
bindingnavigatior
datagridview
datset
sqldataAdapter
datesource
sqlCommandbuilder
sqlCommand

绑定到Dgv
ds.tables["表名"]
ds.change()
getchange()

就这么弄
xing98218 2008-01-09
  • 打赏
  • 举报
回复
而且你又是重新生成的table又没把DataSource给他的数据,当然不增加了
xing98218 2008-01-09
  • 打赏
  • 举报
回复
重新绑定下啊,哥哥
bindingSource1.DataBind()
xing98218 2008-01-09
  • 打赏
  • 举报
回复
select * from 表名 where 1=2
angleoldhen 2008-01-09
  • 打赏
  • 举报
回复
我改成如下:

private void addBtn_Click(object sender, EventArgs e)
{
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加了一空行,且再点按钮就不再增加行了,哪错了呢?
加载更多回复(5)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧