如果你的grid绑定了数据集,就不要add了,在他绑定的datatable中增加row,然后从新绑定到grid

解决方案 »

  1.   

    在dataTable 中新增行就再绑定
      

  2.   

    可以在DataGridView的数据源中操作,给它的数据源增加数据,然后再重新绑定一次。
      

  3.   

    目测楼主直接在设计器中指定的数据源,于是datagridview自动去读数据库了
    根本没有所谓后台datatable
    学习下如何通过代码访问数据库,读到信息放datatable中,然后指定datagridview.datasouse=dt
      

  4.   

    请问怎重新绑定呢?绑定的是窗体1,而添加row是在窗体2,
      

  5.   

    如果你的grid绑定了数据集,就不要add了,在他绑定的datatable中增加row,然后从新绑定到grid
    请问怎重新绑定呢?绑定的是窗体1,而添加row是在窗体2,
      

  6.   

    重新绑定后的,好像有个问题,就是,当添加完数据,绑定后,我再想添加数据,那么前一次添加的数据就没了怎么会没有呢  你用全局变量datatable  你checkbox改变的值都保存到datatable中  再把datatable传回窗体1就好了啊 
      

  7.   

    重新绑定后的,好像有个问题,就是,当添加完数据,绑定后,我再想添加数据,那么前一次添加的数据就没了怎么会没有呢  你用全局变量datatable  你checkbox改变的值都保存到datatable中  再把datatable传回窗体1就好了啊 
    我再窗体2里是这样写
    SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=CS;Integrated Security=True");            SqlDataAdapter sqldap = new SqlDataAdapter("select * from student ", con);            DataSet ds = new DataSet();
                sqldap.Fill(ds);
                form1.dataGridView1.DataSource = ds.Tables[0];            form1.dataGridView1.DataSource = ds.Tables[0].DefaultView;
                form1.dataGridView1.DataSource = null;
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["cb_check2"];
                    Boolean flag = Convert.ToBoolean(checkCell.Value);                if (flag == true)     //查找被选择的数据行
                    {
                                         string GoodsCode = dataGridView1.Rows[i].Cells["材料编号"].Value.ToString();
                       string GoodsName= dataGridView1.Rows[i].Cells["材料名称"].Value.ToString();
                         ds.Tables[0].Rows.Add(GoodsCode, GoodsName); 
                        form1.dataGridView1.DataSource = ds.Tables[0].DefaultView;//重新绑定
                         }
                 
                    }
                }
    但是如果当我添加了数据,传到窗体1后,然后关闭了窗体2,再打开窗体2再添加,这样就把第一次传的数据清除了
      

  8.   

    楼主此处是欠缺一个全局变量来存放勾选的东西。其他应该就没什么问题了吧。把勾选的数组放到全局变量里面。然后窗体2勾选操作数组add 窗体1 刷新界面或者重新绑定 这个全局变量的数据源
      

  9.   

    重新绑定的是不是有问题呢?当绑定后,我再次打开窗体2选择数据后,就会把第一次数据清了你只需要绑定成全局变量里面的东西。如果不你清空这个全局变量那么就不会被清空。。这个变量是作为一个类属性存放在其他位置的所以不会重新打开进行数据重置
    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     BindingList<Customer> blc = new BindingList<Customer>();
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["cb_check"];
                    Boolean flag = Convert.ToBoolean(checkCell.Value);                if (flag == true)     //查找被选择的数据行
                    {
                        string GoodsCode = dataGridView1.Rows[i].Cells["name"].Value.ToString();
                        string GoodsName = dataGridView1.Rows[i].Cells["password"].Value.ToString();
                         int code = int.Parse(dataGridView1.Rows[i].Cells["code"].Value.ToString());
                         MessageBox.Show(GoodsCode);
                        blc.Add(new Customer(code,GoodsCode, GoodsName));
                      
                    }
                    this.dataGridView2.DataSource = blc;            }            this.dataGridView2.DataSource = blc;
      

  10.   

    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     
    汗 你把变量放错了 直接就是去外部新建一个类文件。然后里面直接public static  一个静态变量。form2add的时候加入这个静态变量就行了。
      

  11.   

    将 需要 添加行 的dgv  转成 dt
    用 dt 添加行
    之后 dgv.datasource  =  dt
      

  12.   

    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     
    汗 你把变量放错了 直接就是去外部新建一个类文件。然后里面直接public static  一个静态变量。form2add的时候加入这个静态变量就行了。
    不好意思,不太明白,能不能写个例子给我呢,或者在我原本给的代码修改一下,谢谢了
      

  13.   

    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     
    汗 你把变量放错了 直接就是去外部新建一个类文件。然后里面直接public static  一个静态变量。form2add的时候加入这个静态变量就行了。
    不好意思,不太明白,能不能写个例子给我呢,或者在我原本给的代码修改一下,谢谢了
    就是个全局的TABLE,你存起来,关掉界面也不会消失,然后再往里面增删改就好了。
      

  14.   

    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     
    汗 你把变量放错了 直接就是去外部新建一个类文件。然后里面直接public static  一个静态变量。form2add的时候加入这个静态变量就行了。
    不好意思,不太明白,能不能写个例子给我呢,或者在我原本给的代码修改一下,谢谢了
    就是个全局的TABLE,你存起来,关掉界面也不会消失,然后再往里面增删改就好了。
    你的意思应该是一下这样了。
     private DataTable dt = null;
            private void button1_Click(object sender, EventArgs e)
            {
                dt = new DataTable();            dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Columns.Add("Rate");
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["cb_check"];
                    Boolean flag = Convert.ToBoolean(checkCell.Value);                if (flag == true)     //查找被选择的数据行
                    {
                        string GoodsCode = dataGridView1.Rows[i].Cells["name"].Value.ToString();
                        string GoodsName = dataGridView1.Rows[i].Cells["password"].Value.ToString();
                        int code = int.Parse(dataGridView1.Rows[i].Cells["code"].Value.ToString());     
                        dt.Rows.Add(code, GoodsCode, GoodsName);
                    }
                }
                // DataView dv = new DataView(dt);
                this.form1.dataGridView2.DataSource = dt;
            }
        }可能你没明白我的意思,我就是想,勾选窗体2的数据,把数据传到窗体1里,然后把窗体2关闭后,再次打开窗体2,然后勾选数据传到窗体1,这样两次的数据都可以显示在窗体1里,以上的方法只能显示最后一次的数据
      

  15.   

    按照你的方法还是不行,第二次添加后,第一次添加的数据就没了
     
    汗 你把变量放错了 直接就是去外部新建一个类文件。然后里面直接public static  一个静态变量。form2add的时候加入这个静态变量就行了。
    不好意思,不太明白,能不能写个例子给我呢,或者在我原本给的代码修改一下,谢谢了
    就是个全局的TABLE,你存起来,关掉界面也不会消失,然后再往里面增删改就好了。
    你的意思应该是一下这样了。
     private DataTable dt = null;
            private void button1_Click(object sender, EventArgs e)
            {
                dt = new DataTable();            dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Columns.Add("Rate");
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {                DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["cb_check"];
                    Boolean flag = Convert.ToBoolean(checkCell.Value);                if (flag == true)     //查找被选择的数据行
                    {
                        string GoodsCode = dataGridView1.Rows[i].Cells["name"].Value.ToString();
                        string GoodsName = dataGridView1.Rows[i].Cells["password"].Value.ToString();
                        int code = int.Parse(dataGridView1.Rows[i].Cells["code"].Value.ToString());     
                        dt.Rows.Add(code, GoodsCode, GoodsName);
                    }
                }
                // DataView dv = new DataView(dt);
                this.form1.dataGridView2.DataSource = dt;
            }
        }可能你没明白我的意思,我就是想,勾选窗体2的数据,把数据传到窗体1里,然后把窗体2关闭后,再次打开窗体2,然后勾选数据传到窗体1,这样两次的数据都可以显示在窗体1里,以上的方法只能显示最后一次的数据那把窗体一用TABLE存起来不就好了。第一次加放进去,第二次加又放进去。引用别从新NEW不就好了。同一个地址,同一个引用,数据都存起来了,有什么问题