【问题标题】:How to clear the dataset rows based on the column headings in c#如何根据c#中的列标题清除数据集行
【发布时间】:2015-08-04 04:29:58
【问题描述】:

假设我有一个数据集,其中包含一个表,该表的列具有 A、B、C 等标题 我只需要清除B列的所有内容。我该怎么做?

目前我所做的是,首先我删除了B列

Dataset.Tables[0].Columns.Remove(B);

然后加回来

Dataset.Tables[0].Columns.Add(B);

但是如果执行上述方法,列索引会改变。有没有其他有效的方法来做同样的...?

【问题讨论】:

  • 什么意思是“清除”,你想应用类型的默认值还是一个空字符串(如果它是一个字符串列)?
  • 清除意味着该列的所有内容都应为空
  • 请注意,DataColumn 可以具有与字符串不同的类型。什么是“空的DateTimeint
  • 我真正的意思是字符串数据类型
  • 我已经编辑了我的答案,以展示一种分配任何类型默认值的通用方法,该方法可用于方法ClearTableColumn。在您的情况下,它不需要。

标签: c# asp.net .net dataset


【解决方案1】:

最简单的方法是使用循环:

foreach(DataRow row in Dataset.Tables[0].Rows)
{
    row.SetField("B", ""); // or whatever you want to assign
}

您也可以删除该列,再次添加它并使用SetOrdinal 获得相同的位置:

int ordinal = Dataset.Tables[0].Columns["B"].Ordinal;
Dataset.Tables[0].Columns.Remove("B");
DataColumn bCol = Dataset.Tables[0].Columns.Add("B");
bCol.SetOrdinal(ordinal);

后者并不比普通循环更有效,因为它also uses a loop behind the scenes

如果您需要一种通用方法来分配“空”值,这意味着给定列类型的默认值,您可以使用这种方法:

Type colType = Dataset.Tables[0].Columns["B"].DataType;
object defaultValue = colType.IsValueType ?  Activator.CreateInstance(bType) : null;
foreach (DataRow row in Dataset.Tables[0].Rows)
{
    row.SetField("B", defaultValue); 
}

【讨论】:

  • 如果它不包含行假设 1lac 或更多,它将影响代码性能速度正确
  • @Athul:看看我的答案,我已经编辑过了。您希望多久重新创建一次包含 100000 行的表?为什么?为什么一开始就不能有正确的值?
  • @Athul:您可以使用System.Diagnostics.StopWatch 对其进行测试。但我想这并不是更有效,因为无论如何都必须初始化所有字段。第二种方法只是隐藏了框架在幕后使用的循环。 编辑确认,这里是添加列时循环表格的相关来源:referencesource.microsoft.com/#System.Data/System/Data/…
【解决方案2】:
  dt.Columns.Remove("B");
    dt.Columns.Add("B").SetOrdinal(1);

【讨论】:

  • 与我的第二种方法有何不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多