刚接触C#,现在需要做一个新窗体要求如下:1.在原有的窗体上添加一个button控件,点击按钮后会自动跳转到新窗体
2.原有窗体中有一个dataviewer1控件显示数据库的查询结果,现在需要在点击控件后将原有窗体的dataviewer1控件的数据源复制到新窗体的dataviewercopy中现在我在程序中新建了新窗体,在原有窗体中写了新窗体的跳转代码,但是运行时点击按钮没反应
另关于数据源的复制数据源的问题该怎么处理(需要复制的只是鼠标选中的哪一行的数据)望各位大大帮帮忙,最好是有具体的代码(给分会高点)
我的窗体跳转代码如下:
 private void toolStripButton6_Click(object sender, EventArgs e)
        {
            if (dataGridView1.Rows.Count == 0)
            {
                MessageBox.Show("請查詢后再複製!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            this.Cursor = Cursors.WaitCursor;
            DataTable dt = (DataTable)dataGridView1.DataSource;
            Dpartcost dpt = new Dpartcost();
            partcostcopyfrm pcp = new partcostcopyfrm();
            pcp.Show();
            if (dt != null) dt.Dispose();
            pcp.Dispose();
            this.Cursor = Cursors.Default;
        }

解决方案 »

  1.   

    复制它干嘛,直接传递dataset过去,绑定到新grid就行了
      

  2.   


                DataTable dt1 = new DataTable();
                dt1.Columns.Add("first");//这里添加你要的列,看你需求要多少列就加多少列
                dt1.Columns.Add("second");
                if (dataGridView1.SelectedRows.Count > 0)//这里判断是否有选中
                {
                    DataRow drRow = dt1.NewRow();
                    drRow["first"] = dataGridView1.SelectedRows[0].Cells["first"].Value.ToString();//这里给列赋值
                    drRow["second"] = dataGridView1.SelectedRows[0].Cells["second"].Value.ToString();
                    dt1.Rows.Add(drRow);//把行添加到DataTable里
                }
                frmAnother another = new frmAnother(dt1);//把dt1当作一个参数传递到新窗体
                another.Show();
                if (dt1 != null)
                {
                    dt1.Dispose();
                }
                //another.Show();//这里就不要写了,要不然没法显示新窗体然后在新窗体frmAnother中,加入如下代码        DataTable dtSource = new DataTable();
            public frmAnother(DataTable dt)//新添加一个带参数的构造函数
            {
                InitializeComponent();
                dtSource = dt;
            }        private void frmAnother_Load(object sender, EventArgs e)//这里是窗体的加载事件,你双击窗体就有了
            {
                dataGridView1.DataSource = dtSource;
            }
    这是其中一个方法,还有其他的方法,你可以自己多试试,不要怕错,多练练就行了
      

  3.   

    请问一下你代码里面写的“frmAnother another = new frmAnother(dt1);//把dt1当作一个参数传递到新窗体”这个我试了一下好像不行哦,老是提示不包含采用1个参数的构造函数
    这个是怎么回事呢?另该怎么讲参数传递过去呢?
      

  4.   

    报错是因为你在新窗体没有添加带参数的构造函数
    frmAnother是新窗体,你要在新窗体的后台代码里添加一个带参数的构造函数啊,你打开frmAnother的后台代码,你会看到有以下一段代码public frmAnother()
    {
        InitializeComponent();
    }这是窗体自动生成的无参构造函数,不要删除也不要改动,自己重新添加一个带参数的构造函数,如下代码//这一段是窗体自动生成的,不用改也不用删除
    public frmAnother()
    {
        InitializeComponent();
    }
    public frmAnother()
    {
        InitializeComponent();
    }
    //下面这段才是自己添加的带参数的构造函数
    DataTable dtSource = new DataTable();
    public frmAnother(DataTable dt)//新添加一个带参数的构造函数
    {
        InitializeComponent();
        dtSource = dt;
    }
      

  5.   

    点击按钮的时候把选中行的数据存下来放到一个公共类里面去,新窗体去公共类里面读。或者直接新窗体写一个能够接受一行数据的构造函数,new的时候传过去就好了
      

  6.   

    现在我的新窗体能正常打开,但是打开后不会自动显示选中行的数据,这个是有什么引起的呢?(数据源没传过去还是需要手动写代码将数据写入到datagridview控件的单元格中)
    最好有具体的示例代码,谢谢!