DataTable dt;
dt.Clear();
dt.rows.Clear();
有何区别。

解决方案 »

  1.   

    有区别
    前者把列信息也清空了,此时的dt为null
    后者只删除的所有的行,列的信息还在,相当于一个行数为0的Table,, 此时如果你执行dt.newrow()时,能看出两者区别,前者要报错,后者正常执行
      

  2.   

    DataTable.Clear 方法清除所有数据的 DataTable。所有表中的所有行都被移除。如果表中有任何将使子行孤立的强制子关系,则生成异常。
    DataRowCollection.Clear 方法 清除所有行的集合。
      

  3.   

    2楼搂主的说法存在一定的问题,我写了一个测试程序,并未出现你提到的dt.Clear()后程序就报错。我个人觉得:对于DataTable的Clear()方法与其Rows集合属性的Clear()方法两者在功能上没什么区别,两者都是清空当前表中的所有数据并且表结构信息并未删除(如所包括的列定义)。附测试代码:
    DataTable dt = null;
    private void Form1_Load(object sender, System.EventArgs e)
    {
       dt =new DataTable();
       dt.Columns.Add("msg");
       for(int i =0 ;i < 3; i++)
       {
    DataRow dr = dt.NewRow();
    dr[0] = "测试消息"+i;
    dt.Rows.Add(dr);
       }
       this.dataGrid1.DataSource = dt.DefaultView;
    }private void button1_Click(object sender, System.EventArgs e)
    {
        if(dt == null) return;
        dt.Rows.Clear();
        MessageBox.Show(dt.Columns[0].ColumnName);

        for(int i =0 ;i < 3; i++)
        {
    DataRow dr = dt.NewRow();
    dr[0] = "rows.clear测试消息"+i;
    dt.Rows.Add(dr);
        }
       this.dataGrid1.DataSource = dt.DefaultView;

    }private void button2_Click(object sender, System.EventArgs e)
    {
        if(dt == null) return;
        dt.Clear();
        MessageBox.Show(dt.Columns[0].ColumnName);

        for(int i =0 ;i < 3; i++)
        {
    DataRow dr = dt.NewRow();
    dr[0] = "clear测试消息"+i;
    dt.Rows.Add(dr);
        }
       this.dataGrid1.DataSource = dt.DefaultView;

    }
      

  4.   


    private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("msg");
                for (int i = 0; i < 3; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = "测试消息" + i;
                    dt.Rows.Add(dr);
                }
                DataTable dt1 = new DataTable();
                dt1 = dt;            dt.Clear(); //两种clear方法
                dt1.Rows.Clear();            return;
            }
    借用4楼的写的部分代码,自己在return那里设置断点,然后在监视下看到dt.columns.count和dt1.columns.count都等于1,说明其实两种方法的列定义都没有被清除.所以功能上基本一样
    如果一定要说区别的话,可以参考2楼的说法,它和msdn上对两个方法的解释是一样的
      

  5.   

    兄弟,你们代码有问题,,错在这里dt1 = dt;
      这是在引用 ,,所以操作的是一个table对象,,,,你们各自new一个table对象加入列试,试试