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 pro
I don't believe that DataTable.Clear does clear columns. This code writes "1" to standard output:
var d = new DataTable();
d.Columns.Add("Hello", typeof(string));
d.Clear();
Console.WriteLine(d.Columns.Count);
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.
The both do the same thing. One is just an inherited method from the Collections class. And the Table.Clear() just calls that method.
Do Below and Its working absolutely fine....
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();
AFAIK, the main difference between datatable.clear
and datatable.rows.clear
, is that datatable.clear
clears both rows and columns. So if you want to keep the table structure (i.e. columns), use datatable.rows.clear
. And if you want to start from scratch, use datatable.clear
, or even datatable.reset
to go right back to the beginning.
datatable.reset
is effectively the next level up from datatable.clear
. Using datatable.clear
will fail if there are any constraints applied that would be violated, but using datatable.reset
will get rid of anything and everything that has been put in place since the datatable was created.