DataTable对象的dt.Clear()和dt.rows.Clear()有什么区别? DataTable dt;dt.Clear();dt.rows.Clear();有何区别。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有区别前者把列信息也清空了,此时的dt为null后者只删除的所有的行,列的信息还在,相当于一个行数为0的Table,, 此时如果你执行dt.newrow()时,能看出两者区别,前者要报错,后者正常执行 DataTable.Clear 方法清除所有数据的 DataTable。所有表中的所有行都被移除。如果表中有任何将使子行孤立的强制子关系,则生成异常。DataRowCollection.Clear 方法 清除所有行的集合。 2楼搂主的说法存在一定的问题,我写了一个测试程序,并未出现你提到的dt.Clear()后程序就报错。我个人觉得:对于DataTable的Clear()方法与其Rows集合属性的Clear()方法两者在功能上没什么区别,两者都是清空当前表中的所有数据并且表结构信息并未删除(如所包括的列定义)。附测试代码:DataTable dt = null;private void Form1_Load(object sender, System.EventArgs e){ dt =new DataTable(); dt.Columns.Add("msg"); for(int i =0 ;i < 3; i++) { DataRow dr = dt.NewRow(); dr[0] = "测试消息"+i; dt.Rows.Add(dr); } this.dataGrid1.DataSource = dt.DefaultView;}private void button1_Click(object sender, System.EventArgs e){ if(dt == null) return; dt.Rows.Clear(); MessageBox.Show(dt.Columns[0].ColumnName); for(int i =0 ;i < 3; i++) { DataRow dr = dt.NewRow(); dr[0] = "rows.clear测试消息"+i; dt.Rows.Add(dr); } this.dataGrid1.DataSource = dt.DefaultView; }private void button2_Click(object sender, System.EventArgs e){ if(dt == null) return; dt.Clear(); MessageBox.Show(dt.Columns[0].ColumnName); for(int i =0 ;i < 3; i++) { DataRow dr = dt.NewRow(); dr[0] = "clear测试消息"+i; dt.Rows.Add(dr); } this.dataGrid1.DataSource = dt.DefaultView; } private void button1_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("msg"); for (int i = 0; i < 3; i++) { DataRow dr = dt.NewRow(); dr[0] = "测试消息" + i; dt.Rows.Add(dr); } DataTable dt1 = new DataTable(); dt1 = dt; dt.Clear(); //两种clear方法 dt1.Rows.Clear(); return; }借用4楼的写的部分代码,自己在return那里设置断点,然后在监视下看到dt.columns.count和dt1.columns.count都等于1,说明其实两种方法的列定义都没有被清除.所以功能上基本一样如果一定要说区别的话,可以参考2楼的说法,它和msdn上对两个方法的解释是一样的 兄弟,你们代码有问题,,错在这里dt1 = dt; 这是在引用 ,,所以操作的是一个table对象,,,,你们各自new一个table对象加入列试,试试 dataGridView的问题,请帮忙解决,谢谢 请问,这个线程,为什么输出不一样 C#中Bitmap显示图片,并设置一些透明色的问题! winform添加视频 取字符串子串问题 C#如何用代码获取指定打印机支持纸张的最大与最小尺寸 关于两个button中调用线程对象的问题 C# IP设置? 控制台停留语句 页面刷新问题!~ 求一正则 [跪求]SqlBulkCopy 提高性能
前者把列信息也清空了,此时的dt为null
后者只删除的所有的行,列的信息还在,相当于一个行数为0的Table,, 此时如果你执行dt.newrow()时,能看出两者区别,前者要报错,后者正常执行
DataRowCollection.Clear 方法 清除所有行的集合。
DataTable dt = null;
private void Form1_Load(object sender, System.EventArgs e)
{
dt =new DataTable();
dt.Columns.Add("msg");
for(int i =0 ;i < 3; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "测试消息"+i;
dt.Rows.Add(dr);
}
this.dataGrid1.DataSource = dt.DefaultView;
}private void button1_Click(object sender, System.EventArgs e)
{
if(dt == null) return;
dt.Rows.Clear();
MessageBox.Show(dt.Columns[0].ColumnName);
for(int i =0 ;i < 3; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "rows.clear测试消息"+i;
dt.Rows.Add(dr);
}
this.dataGrid1.DataSource = dt.DefaultView;
}private void button2_Click(object sender, System.EventArgs e)
{
if(dt == null) return;
dt.Clear();
MessageBox.Show(dt.Columns[0].ColumnName);
for(int i =0 ;i < 3; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "clear测试消息"+i;
dt.Rows.Add(dr);
}
this.dataGrid1.DataSource = dt.DefaultView;
}
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("msg");
for (int i = 0; i < 3; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "测试消息" + i;
dt.Rows.Add(dr);
}
DataTable dt1 = new DataTable();
dt1 = dt; dt.Clear(); //两种clear方法
dt1.Rows.Clear(); return;
}
借用4楼的写的部分代码,自己在return那里设置断点,然后在监视下看到dt.columns.count和dt1.columns.count都等于1,说明其实两种方法的列定义都没有被清除.所以功能上基本一样
如果一定要说区别的话,可以参考2楼的说法,它和msdn上对两个方法的解释是一样的
这是在引用 ,,所以操作的是一个table对象,,,,你们各自new一个table对象加入列试,试试