Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net DataTable.Clear和DataTable.Rows.Clear之间有区别吗?_.net - Fatal编程技术网

.net DataTable.Clear和DataTable.Rows.Clear之间有区别吗?

.net DataTable.Clear和DataTable.Rows.Clear之间有区别吗?,.net,.net,我记得直接在类上调用的某些方法/属性与在属性上同名的方法/属性之间存在差异。(可能是我读到这篇文章的RowCount/Count属性。)区别在于其中一个忽略了它,而其他方面/使用了它 在这种特殊情况下,我想知道和之间的区别。我可以想象其中一个实际上删除了所有行,而另一个只是将它们标记为已删除 所以我的问题是,这两种清晰的方法之间有区别吗?如果有,区别是什么 (哦,这是针对.NET 1.1 btw的,以防语义从一个版本更改为另一个版本。)AFAIK,datatable.clear和datatabl

我记得直接在类上调用的某些方法/属性与在属性上同名的方法/属性之间存在差异。(可能是我读到这篇文章的RowCount/Count属性。)区别在于其中一个忽略了它,而其他方面/使用了它

在这种特殊情况下,我想知道和之间的区别。我可以想象其中一个实际上删除了所有行,而另一个只是将它们标记为已删除

所以我的问题是,这两种清晰的方法之间有区别吗?如果有,区别是什么


(哦,这是针对.NET 1.1 btw的,以防语义从一个版本更改为另一个版本。)

AFAIK,
datatable.clear
datatable.rows.clear
之间的主要区别是
datatable.clear
同时清除行和列。因此,如果要保留表结构(即列),请使用
datatable.rows.clear
。如果您想从头开始,请使用
datatable.clear
,甚至
datatable.reset
返回到开始


datatable.reset
实际上是
datatable.clear的上一级。使用
datatable.clear
将失败,如果应用了任何可能违反的约束,但使用
datatable.reset
将删除自datatable创建以来已放置的所有内容。

我不相信datatable.clear会清除列。此代码将“1”写入标准输出:

var d = new DataTable();
d.Columns.Add("Hello", typeof(string));
d.Clear();
Console.WriteLine(d.Columns.Count);

两者都做同样的事情。一个是从Collections类继承的方法。Table.Clear()只调用了该方法。

我已经在.NET1.1/VS2003中测试了不同的方法,Matt Hamilton似乎是对的

  • 就我测试的两件事而言,DataTable.Clear和DataTable.Rows.Clear的行为似乎是相同的:都删除了所有行(它们不会将它们标记为已删除,它们实际上会将它们从表中删除),也不会删除表中的列
  • 重置清除行和列
  • DataTable.Rows.Count不包括已删除的行。(这可能是1.1特定的)
  • foreach迭代删除的行。(我很确定删除的行在2.0中会被跳过。)

    • 它们之间没有区别。DataRowCollection.Clear()调用Table.Clear()


      Table.Clear()检查表是否可以被清除(约束可以防止这种情况发生),删除行并重建任何索引。

      在.Net 1.1中,
      DataRowCollection.Clear
      调用
      DataTable.Clear

      然而,在.NET2.0中,有一个区别。 如果我正确理解源代码,
      DataTable.Clear
      将清除未附加的行(使用
      DataTable.NewRow
      创建),而DataRowCollection.Clear不会

      区别在于
      RecordManager.Clear
      (以下来源,来自v3.5 SP 0的)
      clearAll
      仅在从
      DataTable.Clear调用时才为真

          internal void Clear(bool clearAll) { 
              if (clearAll) {
                  for(int record = 0; record < recordCapacity; ++record) { 
                      rows[record] = null;
                  }
                  int count = table.columnCollection.Count;
                  for(int i = 0; i < count; ++i) { 
                      //
      
                      DataColumn column = table.columnCollection[i]; 
                      for(int record = 0; record < recordCapacity; ++record) {
                          column.FreeRecord(record); 
                      }
                  }
                  lastFreeRecord = 0;
                  freeRecordList.Clear(); 
              }
              else { // just clear attached rows 
                  freeRecordList.Capacity = freeRecordList.Count + table.Rows.Count; 
                  for(int record = 0; record < recordCapacity; ++record) {
                      if (rows[record]!= null && rows[record].rowID != -1) { 
                          int tempRecord = record;
                          FreeRecord(ref tempRecord);
                      }
                  } 
              }
          } 
      
      internalvoidclear(boolclearall){
      如果(全部清除){
      对于(int record=0;record
      执行以下操作,其工作绝对正常

      DataRow[] d_row = dt_result.Select("isfor_report='True'");
      DataTable dt = dt_result.Clone();                
      foreach (DataRow dr in d_row)
      {
           dt.ImportRow(dr);
      }
      gv_view_result.DataSource = dt;
      gv_view_result.DataBind();
      

      清除和重置之间有什么区别?这正是我想要的答案,谢谢。:)但是,
      .Clear()
      也会清除列,这是不正确的;但事实并非如此,
      .Reset()
      确实如此除非它是1.1的东西。我没有VS2003来测试它。不,我实际上现在已经测试过了,这段代码也在.NET 1.1/VS2003的标准输出中写入了“1”。看看这个系统。带Reflector的数据程序集,你会发现这是错误的。万岁!测试!(与我的下意识回答不同,我后来删除了这个回答)这与问题完全无关。