form3里选择部分行,点选择后弹出form4,并把form3里选择的项显示在form4的datagridview里
请教下该怎么弄。。
  //form3里
  
            foreach (DataGridViewRow gv in dataGridView1.Rows)
            {
               
                if (gv.Cells[0].Value != null)
                {
                    if (bool.Parse(gv.Cells[0].Value.ToString()))
                       // 
                }
            }
             datatable dt;
             form4 frm4 = new form4();
             frm4.mdiparent = mdiparent;
             frm4.show(dt);//form4里
     datagridview gv = new datagridview();
    gv.datasource  = dt;

解决方案 »

  1.   

    自己写一个form4的构造方法 有一个datagridview的参数
    然后把form3做为参数传进去,试试。或者有dataset能吧数据传过去
      

  2.   

    在form3里写一个方法,封装成实体。在form4去调用。form3的方法访问修饰符要定义成public 
      

  3.   


    //form3里
      
                foreach (DataGridViewRow gv in dataGridView1.Rows)
                {
                   
                    if (gv.Cells[0].Value != null)
                    {
                        if (bool.Parse(gv.Cells[0].Value.ToString()))
                           // 这里把选择的行放到另一个datatable或者datagridview里
                               //该怎么写?
                    }
                }
    jjjjj102310253 的方法,直接传datagridview应该也可以,试试
      

  4.   

    在form3 中你要初始化form4,
    那么:form4 fm = new form4(XX);
    f.showDailg();
    ..关键是“XX”,它就是你要的数据,
    而“XX",就是form4中构造函数的参数。
      

  5.   

    手动生成DataTable :// Form3
                DataTable dt=new DataTable();
                DataColumn col1=new DataColumn(......); dt.Columns.Add(col1);
                DataColumn col2=new DataColumn(......); dt.Columns.Add(col2);            //如果 DataGridView 是绑定了 DataTable 的话,则不需要代码生成 DataColumn            foreach (DataGridViewRow gv in dataGridView1.Rows)
                {
                   
                    if (gv.Cells[0].Value != null)
                    {
                        if (bool.Parse(gv.Cells[0].Value.ToString()))
                           // 
                        DataRow dr=dt.NewRow();
                        dr["col1"]="abc";dr["col"]=123;.....
                        dt.Rows.Add(dr);
                        
                    }
                }             form4 frm4 = new form4(dt);
                 frm4.mdiparent = mdiparent;
                 frm4.show(dt); // Form4          DataTable dt;          public void Form4(DataTable dtable)
              {
                  dt=dtable;
              }          private void Form4_Load(....)
    {
         datagridView.DataSource=dt;
    }
      

  6.   

            foreach (DataGridViewRow gv in dataGridView1.Rows)
                {
                   
                    if (gv.Cells[0].Value != null)
                    {
                        if (bool.Parse(gv.Cells[0].Value.ToString()))
                           // 
                        DataRow dr=dt.NewRow();
                        dr["col1"]="abc";dr["col"]=123;.....
                        dt.Rows.Add(dr);
                        
                    }
                }
    ----------------------
    上面 
    DataRow dr=dt.NewRow();
                        dr["col1"]="abc";dr["col"]=123;.....
                        dt.Rows.Add(dr);这里只能这样填充DataTable吗,一个一个字段赋值?
    能不能用datagridview.row 来填充?
    ——————————————————
    另外可以直接传datagridview的吗? 
      

  7.   

      public dmain(DataGridView gv)
            {
               
                DataGridView GVd = new DataGridView();
                GVd = gv;
                
            }看到GVd的 rowcount是有值的,但是为什么不显示数据出来呢?
      

  8.   

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 

    for (int i = 0; i < dataGridView1.Columns.Count; i++) 

    dataGridView2[i, dataGridView2.Rows.Count - 1].Value = dataGridView1[i, e.RowIndex].Value; 

    } get it
      

  9.   


    DataGridView.Row 恐怕不能传吧~~
    如果 DataGridView 绑定了 DataTable ,则其 DataTable.Select(...) 所生成的DataRow[]数组是可以传过去绑定的,如果你没有绑定DataTable 的话~~~我觉得只能一条条的赋值.
      

  10.   

    当然是有值的,因为是个引用,但引用的是别的窗口的控件,当然显示不出来!
    如果你非要这么做的话,可以用GVd=gv.Clone;不过不提倡这么做。
      

  11.   

    1、在Form4里添加一个与Form3中一样的DataGridView控件
    2、用Form3中dataGridView.SelectedRows属性可以返回DataGridViewSelectedRowCollection 如下:
    DataGridViewSelectedRowCollection dc = dataGridView1.SelectedRows;
    3、给Form4添加一个带有 DataGridViewSelectedRowCollection 的构造函数,如下:
    public class Form4:Form
    {
       public Form4(DataGridViewSelectedRowCollection dc)
       {
           InitializeComponent();
           foreach (DataGridViewRow dr in dc)
             {
                dataGridView1.Rows.Add(dr);
             }
            
       }
    4、在Form3中按“选择”时:
     private void button2_Click(object sender, EventArgs e)
     {
        DataGridViewSelectedRowCollection dc = dataGridView1.SelectedRows;
        Form4 f4 =new Form4(dc);
        Form4.show();
       ......
    }
        
      

  12.   


    GVd=gv.Clone  ?    。有这东西吗?
      

  13.   

    重载form4的构造方法,在form3中创建form4对象的时候用新构造方法传值
      

  14.   

    还是这样好了 ,传DataTable,至少可以实现
                                 DataRow dr=dtt.NewRow();
                              dtt.Columns.Add("col1");
                              dr["col1"]=GVdplan.Rows[0].Cells[2].Value;
                              dtt.Rows.Add(dr);
      

  15.   

    定义一个public static string.....然后把你要传的值赋给他
      

  16.   

    DataGridViewRow 封装成属性公开,在另外一个窗体里直接引用操作。
      

  17.   

    可以试下窗体的Form.Tag属性,把你要的字段款装成对象,然后用Form.Tag传递,在新窗体接收,或是新窗体的数据源直接与这个对象绑定。
      

  18.   


    已经用传string的方法实现了,
    这个方法要怎么写,是在构造函数里申明吗?