我正在尝试为数据表中的单个列设置所有行的相同值,而不使用for循环。任何人都可以建议任何更快的方法来实现相同。
答案 0 :(得分:14)
Expression
属性来完成。请注意,应引用字符串值,否则会将其视为另一个列名。1
这会将列'col1'设置为字符串值a
:
preview.Columns["col1"].Expression = "'a'";
这将在'col1'中显示'col2'列的值:
preview.Columns["col1"].Expression = "col2";
答案 1 :(得分:10)
除非您算上foreach
,否则不会。无论如何,你需要循环。
如果您使用DataTable
版本,最快的方法是使用DataColumn
访问者,即
var col = table.Columns["Foo"];
foreach(var row in table.Rows)
row[col] = value;
作为替代方案:因为这可能与数据库有关,所以手动编写TSQL以适当地设置所有值(即在TSQL中使用合适的 where
子句)。
update [theTable]
set [theColumn] = theValue
where --TODO - something sensible
答案 2 :(得分:4)
您是否考虑过使用默认值删除并重新添加列?
dt.Columns.Remove("FilterText")
dt.Columns.Add(New DataColumn() With {.ColumnName = "FilterText",
.DataType = GetType(String),
.DefaultValue = "Jam and chips"})
(假设您的列名是FilterText,并且您想将其设置为“Jam and chips”)
答案 3 :(得分:0)
我遇到了这种类型的问题,其中选择全部复选框用于将列“sel”设置为1或0,foreach循环非常慢,我从@Jonathan回答更快,但由于With子句在c#
中不起作用,因此进行了一些小的修改dtEmpList.Columns.Remove("sel");
dtEmpList.Columns.Add(new DataColumn("sel",typeof(bool)(chkSelectAll.Checked ? "1" : "0")));
答案 4 :(得分:0)
IWrapper<ISnack> wrappedSnack = new CheeseCakeContainer();
var c1 = new CheeseCake();
wrappedSnack.Wrap(c1);
public interface ISnack { }
public interface IWrapper<out TSnack> where TSnack : ISnack
{
void Wrap(ISnack snack);
}
public class CheeseCakeContainer : IWrapper<CheeseCake>
{
public void Wrap(ISnack snack)
{
((CheeseCake)snack).Type = "Strawberry";
}
}
public class CheeseCake : ISnack
{
public string Type { get; set; }
}