分配新的DataTable,DataTable.Clear(),DataTable.Reset()和DataTable.Rows.Clear()有什么区别?

时间:2014-07-31 11:07:35

标签: c# asp.net

我正在使用数据表将DataSource绑定到GridView。 我就是这样做的。

我声明了数据表如下。

 private DataTable dt_CompanyNames;

然后

private void get_CompanyNames()
{
     dt_CompanyNames = new DataTable();
     dt_CompanyNames = objDesignation_Bll.Get_CompanyNames();
     gridCompanies.DataSource = dt_CompanyNames;
     gridCompanies.DataBind();
}

所以我的问题是如果我以下面的方式做那些事情。

首先,我必须这样做。

private DataTable dt_CompanyNames=new DataTable();

然后在我的方法中,我使用这些陈述。

1)方法1

 dt_CompanyNames.Clear();

2)方法2

 dt_CompanyNames.Rows.Clear(); 

3)方法3

 dt_CompanyNames.Reset();

4)或者我应该坚持我的现有方法吗?

dt_CompanyNames = new DataTable();

在此方法中,每次调用此函数时,它始终会创建新的Datatable。好吗?

那么它们之间的区别是什么?在效率方面是否有一个比另一个好?

1 个答案:

答案 0 :(得分:0)

new DataTable()为引用的变量分配一个新对象,默认情况下,所有元数据都将从DataTable中删除。

根据MSDN

DataTable.Clear()

  

删除所有表中的所有行。如果是,则生成异常   table具有任何会导致子行的强制子关系   孤儿。

     

如果DataSet绑定到XmlDataDocument,则调用DataSet.Clear   或DataTable.Clear引发NotSupportedException。为了避免这种情况   情况,遍历每个表,一次删除一行。什么时候   您使用NewRow创建新行,必须先处理行   你打电话给Clear。

来自答案HERE

  

DataTable.Clear()和Rows.Clear()都将删除所有行   数据表但不是列。它们都执行相同的功能,除了   一个在dataTable类中定义,第二个在   DataRowCollection类。