I recall there is a difference between some methods/properties called directly on the DataTable class, and the identically named methods/properties on the DataTable.Rows property. (Might have been the RowCount/Count property for which I read this.) The difference is one of them disregards DataRow.RowState, and the other respects/uses it.
In this particular case I'm wondering about the difference between DataTable.Clear and DataTable.Rows.Clear. I can imagine one of them actually removes all rows, and the other one just marks them as deleted.
So my question is, is there a difference between the two Clear methods, and if so what is the difference?
(Oh, this is for .NET 1.1 btw, in case the semantics changed from one version to another.)
In .Net 1.1, DataRowCollection.Clear
calls DataTable.Clear
However, in .Net 2.0, there is a difference.
If I understand the source correctly, DataTable.Clear
will clear unattached rows (created using DataTable.NewRow
) whereas DataRowCollection.Clear won't.
The difference is in RecordManager.Clear
(source below, from the .Net Reference Source for v3.5 SP 0); clearAll
is true only when called from 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);
}
}
}
}
I've been testing the different methods now in .NET 1.1/VS2003, seems Matt Hamilton is right.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With