本帖最后由 hugofgh 于 2013-02-22 17:57:53 编辑

解决方案 »

  1.   

    DTSource.Copy();是什么?里面有数据吗?
      

  2.   

    同意楼上的,输出DTSource.Copy()的count看看
      

  3.   

    你还没绑定:
    dgvDataViewer1.DataBind();
      

  4.   

    里面当然有数据,其实如果datagridview是直接在窗体中拖进来的,给datasource赋值后,datagridview的.Rows.Count都有了。
      

  5.   

    问题是不是出在:包含这个datagridview的类不是一个窗体类,而是一个非窗体类。
      

  6.   

    跟是不是在窗体里边写代码没有关系。不管在哪里new一个datagridview,以最终也需要把它加入窗体控件树种。如果它不具有可见性,何必要绑定数据?不要用为了显示而开发的控件当作你的所谓DataTable。如果你new了一个控件,那么就把它加入窗体控件树种!
      

  7.   


    谢谢您的解答,只是我还是不明白,因为我将这个datagridview加进了一个显示的panel里面。这个会跟先后顺序有关系吗?先给datagridview的datasource赋值,后将datagridview加入panel中。
    希望您能帮我,祝您元宵节快乐。
      

  8.   

        public class Task
        {
            public DataGridView gridview = new DataGridView();
        }
    Task task = new Task();        private void Form8_Load(object sender, EventArgs e)
            {
                DataSet1.DataTable2DataTable ta = new DataSet1.DataTable2DataTable();
                for (int i = 0; i < 5; i++)
                {
                    DataSet1.DataTable2Row row = ta.NewDataTable2Row();
                    row[0] = i;
                    ta.Rows.Add(row);
                }
                task.gridview.DataSource = ta.Copy();
            }你说的现象就没出现过。不知道你写的程序是不是这样的。
      

  9.   


    和这个很像,
       public class Task
        {
            public DataGridView gridview = new DataGridView();public task(DataTable  dt)
    {
    gridview.DataSource = dt.Copy();
    }
        }   public class Form1:Form
    {
            Task task = new Task();
            public DataGridView gridview22 = new DataGridView();        private void Method(object sender, EventArgs e)
            {
                DataSet1.DataTable2DataTable ta = new DataSet1.DataTable2DataTable();
                for (int i = 0; i < 5; i++)
                {
                    DataSet1.DataTable2Row row = ta.NewDataTable2Row();
                    row[0] = i;
                    ta.Rows.Add(row);
                }
                panel.add(task.gridview);
                task.gridview.DataSource = ta.Copy();//此时task.gridview.Rows.Count=0               
                gridview22.gridview.DataSource = ta.Copy();//此时task.gridview.Rows.Count>0
            }
    }
      

  10.   

    public task(DataTable  dt)
    {
    gridview.DataSource = dt.Copy();
    }为什么会有这个呢?把这个构造函数去掉再试试看。
    我这里数据都能显示出来。
      

  11.   

    刚刚写的有点问题,我的是这个样子的:
      public class Task
        {
            public DataGridView gridview = new DataGridView();public task(DataTable  dt)
    {
    gridview.DataSource = dt.Copy();
    }
        }   public class Form1:Form
    {
            
            public DataGridView gridview22 = new DataGridView();        private void Method(object sender, EventArgs e)
            {
                DataSet1.DataTable2DataTable ta = new DataSet1.DataTable2DataTable();
                for (int i = 0; i < 5; i++)
                {
                    DataSet1.DataTable2Row row = ta.NewDataTable2Row();
                    row[0] = i;
                    ta.Rows.Add(row);
                }
               
                Task task = new Task(ta);//此时task.gridview.Rows.Count=0
                panel.add(task.gridview);
                   
                gridview22.gridview.DataSource = ta.Copy();//此时task.gridview.Rows.Count>0
            }
    }
      

  12.   

    你放到form_load里面测试下数据绑定看看吧。
    挺奇怪。想不出原因。
      

  13.   

            private void Form8_Load(object sender, EventArgs e)
            {
                //DataGridView dgw = new DataGridView();
                DataSet1.DataTable2DataTable ta = new DataSet1.DataTable2DataTable();
                for (int i = 0; i < 5; i++)
                {
                    DataSet1.DataTable2Row row = ta.NewDataTable2Row();
                    row[0] = i;
                    ta.Rows.Add(row);
                }
                Task tt = new Task(ta);
                panel1.Controls.Add(tt.gridview);
                //task.gridview.DataSource = ta.Copy();
            }也没问题。显示出来了。
      

  14.   

    我曾经也遇到过类似的问题,只是当时commbox控件,后来把顺序换一下,要先加载窗体里,然后给控件赋值,所以你不要把gridview.DataSource = dt.Copy();写到构造函数中