.net DataTable.Clear和DataTable.Rows.Clear之间有区别吗?
我记得直接在类上调用的某些方法/属性与在属性上同名的方法/属性之间存在差异。(可能是我读到这篇文章的RowCount/Count属性。)区别在于其中一个忽略了它,而其他方面/使用了它 在这种特殊情况下,我想知道和之间的区别。我可以想象其中一个实际上删除了所有行,而另一个只是将它们标记为已删除 所以我的问题是,这两种清晰的方法之间有区别吗?如果有,区别是什么.net DataTable.Clear和DataTable.Rows.Clear之间有区别吗?,.net,.net,我记得直接在类上调用的某些方法/属性与在属性上同名的方法/属性之间存在差异。(可能是我读到这篇文章的RowCount/Count属性。)区别在于其中一个忽略了它,而其他方面/使用了它 在这种特殊情况下,我想知道和之间的区别。我可以想象其中一个实际上删除了所有行,而另一个只是将它们标记为已删除 所以我的问题是,这两种清晰的方法之间有区别吗?如果有,区别是什么 (哦,这是针对.NET 1.1 btw的,以防语义从一个版本更改为另一个版本。)AFAIK,datatable.clear和datatabl
(哦,这是针对.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的数据程序集,你会发现这是错误的。万岁!测试!(与我的下意识回答不同,我后来删除了这个回答)这与问题完全无关。