代码之家  ›  专栏  ›  技术社区  ›  Tobi

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

  •  6
  • Tobi  · 技术社区  · 16 年前

    我记得直接在上调用的某些方法/属性之间存在差异 DataTable 类,以及 DataTable.Rows 所有物(可能是我读到的RowCount/Count属性。)区别在于其中一个忽略 DataRow.RowState ,以及其他方面/使用它。

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

    所以我的问题是,,

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

    7 回复  |  直到 16 年前
        1
  •  7
  •   SLaks    15 年前

    DataRowCollection.Clear 电话 DataTable.Clear

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

    区别在于 RecordManager.Clear (来源如下,来源于 .Net Reference Source clearAll 数据表,清除 .

        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);
                    }
                } 
            }
        } 
    
        2
  •  5
  •   Tobi    16 年前

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

    datatable.clear datatable.rows.clear 是吗 datatable.clear 清除行和列。因此,如果要保留表结构(即列),请使用 . 如果你想从头开始,使用 datatable.clear ,甚至 datatable.reset 回到开头。

    实际上是从 datatable.clear . 使用 datatable.clear datatable.reset 将删除自创建datatable以来放置的所有内容。

        4
  •  2
  •   Matt Hamilton    16 年前

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

    var d = new DataTable();
    d.Columns.Add("Hello", typeof(string));
    d.Clear();
    Console.WriteLine(d.Columns.Count);
    
        5
  •  0
  •   Richard Szalay    16 年前

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

        6
  •  -1
  •   Himalaya Garg    13 年前

    做下面的工作,它的工作绝对好。。。。

    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();
    
        7
  •  -2
  •   Joe Chin    16 年前

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