想实现这么种效果:
在若干干控件输入、选择数据后,点击“添加”按钮,将这条记录添加并显示在datagridview中
继续往上面的控件输入、选择数据后,再点击“添加”按钮,将新的记录追加并显示在同一datagridview中,如此反复操作,直到要输入的记录都输入完
接着点击“提交”按钮,将显示在datagridview里的几行记录都添加到数据库里。不敢奢要代码,希望大家给个思路,或者提供关键代码。谢谢先

解决方案 »

  1.   

    不绑定,一个个DataGridViewRow那样添加,按提交之后再生成sql储存
      

  2.   

    没啥子啦,先把数据添加到dataGridView控件,不用绑定,要做的就是把输入的值,加到dataGridView控件里,可以用数组的,
    然后再从dataGridView里读出数据,存入数库,这个用循环很方便,我用的是ListVIew控件,不过方式一样的,
      

  3.   

    你不用往dataGridView里直接添加,你可以直接往一个DataSet的表里添加,然后绑定数据,提交的时候就用SqlDataAdapter 的Update 方法把数据提交就可以了。这样就直接将所有新增加的插入到数据库里了。
      

  4.   

    先new一个DataGridViewRow,然后调用datagridview实例Rows.Add函数
      

  5.   

    有两法子:
    1、先通过DataGridViewColumn对象给DataGridView添加列,再通过DataGridViewRow对象添加行。2、让DataGridView绑定一内存DataTable,添加记录直接往DataTable写,再绑回DataGridView。
      

  6.   

    我是这么写的,为什么添加到datagridview的数据只显示到带 * 的那行,而且只显示新加的记录,前面加的都成空行了
              
                DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex];
                dgr.Cells[0].Value = progcomboBox.Text;
                dgr.Cells[1].Value = tapecodetextBox.Text;
                dataGridView1.Rows.Add();
      

  7.   

    你可以参考dataGridView批量操作写法
      

  8.   

    现在还没到批量添加到数据库那一步呢,只是将记录手动添加到datagridview的行 就卡住了。
      

  9.   

    应该这样吧:
    dataGridView1.Rows.Add();  
    DataGridViewRow dgr = dataGridView1.Rows[dataGridView1.NewRowIndex-1];     
    dgr.Cells[0].Value   =   progcomboBox.Text; 
    dgr.Cells[1].Value   =   tapecodetextBox.Text; 
      

  10.   

    楼主你添加的方式不对.
    DataGridViewRow dgr= dataGridView1.Rows[0].Clone() as DataGridViewRow;
    dgr.Cells[0].Value   =   progcomboBox.Text; 
                            dgr.Cells[1].Value   =   tapecodetextBox.Text; 
                            dataGridView1.Rows.Add(dgr); 
      

  11.   

    先保存在datatable中
    在更新到数据库中去
      

  12.   

    给你个思路
    首先选把你要绑定到datagridview上的数据用DataTable接受
    然后和datagridview绑定,绑定后对datagridview进行操作,也就是对DataTable操作,
    然后把DataTable保存到数据库中.
    DataTable只适合单表,多张表就不可以了.
    看看我的blog
    http://blog.csdn.net/hkdeaccp
      

  13.   

    datagridview绑定DataTable就可以
    添加按钮:DataRow dr=dt.NewRow();
    dr["字段"]=值
    ...........
    ...........
    dt.Rows.Add(dr);
    dgv.DataSource=dt;//把新行添加到datatable,此时数据都存在缓存里
    提交按钮:SqlDataAdapter1.Update(dt);//更新数据库
      

  14.   

    另起思想,
       假定你的是一个产品,那么定义一个产品管理者,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也很清楚.
      

  15.   

    如果是将数据填充到datatable的话,dataadapter也需要一句sql语句,如下:
    sqldataadapter da = new sqldataadapter(sql,cn);
    da.fill(dt);
    那么这个sql语句写什么好?初始状态下datatable应该没有任何数据的。
      

  16.   

    我改成如下:        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加了一空行,且再点按钮就不再增加行了,哪错了呢?
      

  17.   

    select * from 表名 where 1=2
      

  18.   

    重新绑定下啊,哥哥
    bindingSource1.DataBind()
      

  19.   

    而且你又是重新生成的table又没把DataSource给他的数据,当然不增加了
      

  20.   

    bindingnavigatior
    datagridview
    datset
    sqldataAdapter
    datesource
    sqlCommandbuilder
    sqlCommand绑定到Dgv
    ds.tables["表名"]
    ds.change()
    getchange()就这么弄
      

  21.   

    目的已基本实现,代码如下:        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);
            }
      

  22.   

    其实这是一个非常简单的问题,首先在展示时对这个datagridview进行数据绑定,即datagridview1.datasource =dt; 因为这个是双向绑定的,所以我们只要对数据源的增删改(即对dt进行操作),会反映到datagridview中,
    就是添加按钮时:DataRow   dr=dt.NewRow(); 
    dr["字段"]=值 
    ........... 
    ........... 
    dt.Rows.Add(dr); 
    然后更新 SqlDataAdapter1.Update(dt)更新到数据库即可,然后dt.acceptchanges()不需要绑来绑去的
      

  23.   

    我也在找类似的实现教教我吧。。不过我的是不同的两个DGV
      

  24.   

     帮我回答一下。。http://topic.csdn.net/u/20110728/10/87c0dedd-ef46-48cd-85df-49c87c5523e1.html c# 将dgv的行存储到另一dgv里面