为什么我的数据表行中没有更新值?
我有这个代码
foreach (DataRow row in dt.Rows) { Debug.WriteLine("Start of Row"); for (int i = 0; i < row.ItemArray.Length; i++) { string val = row.ItemArray[i].ToString(); row.ItemArray[i] = "My New Value"; Debug.WriteLine("val: {0}, new: {1}", val, row.ItemArray[i].ToString()); } }
但价值永远不会更新。 我不知道为什么。
Start of Row val: 2/02/2012, new: 2/02/2012 val: ac, new: ac val: ac, new: ac val: 515.00, new: 515.00
编辑
还有一些尝试
for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; for (int x = 0; x < row.ItemArray.Length; x++) { string val = row.ItemArray[x].ToString(); row.ItemArray.SetValue("My New Value", x); Debug.WriteLine("val: {0}, new: {1}", val, row.ItemArray[x].ToString()); } } val: 2/02/2012, new: 2/02/2012 val: ac, new: ac val: ac, new: ac val: 515.00, new: 515.00
另一个尝试
for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; for (int x = 0; x < row.ItemArray.Length; x++) { string val = row.ItemArray[x].ToString(); row[i] = "My New Value"; Debug.WriteLine("val: {0}, new: {1}", val, row.ItemArray[x].ToString()); } }
给我
System.Data.ReadOnlyException was unhandled by user code Message=Column 'Date' is read only. Source=System.Data StackTrace: at System.Data.DataRow.set_Item(DataColumn column, Object value) at System.Data.DataRow.set_Item(Int32 columnIndex, Object value) at CCRecomendator.Framework.Services.CreditCardRecommendatorService.ParseTransactions(Stream stream) in at CCRecomendator.WebUI.Controllers.RecommendController.UploadTransactions(HttpPostedFileBase file) in at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.c__DisplayClass15.b__12() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) InnerException:
那么这些东西可能是只读还是什么?
我正在使用filehelpers它正在创建数据表及其行。 不确定它是否正在做一些让我无法做我想做的事情。
而不是ItemArray,只需访问索引:
foreach (DataRow row in dt.Rows) { Debug.WriteLine("Start of Row"); for (int i = 0; i < row.ItemArray.Length; i++) { string val = row[i].ToString(); row[i] = "My New Value"; Debug.WriteLine("val: {0}, new: {1}", val, row[i].ToString()); } }
这是foreach循环的缺点,您无法修改集合的内容,因为它仅限于循环内部。 您可能需要使用常规for循环。 根据这个微软文档 “ foreach语句用于迭代集合以获取所需信息,但不应用于更改集合的内容以避免不可预测的副作用 ”。
如果你使用,你会得到相同的结果吗?
Debug.WriteLine(“val:”+ val +“,new:”+ row.ItemArray [i] .ToString());
试试这个
for (i=0; i< dt.Rows.Count ; i++) { Debug.WriteLine("Start of Row"); for (int j = 0; j < dt.Rows[i].ItemArray.Length; j++) { string val = dt.Rows[i].ItemArray[j].ToString(); dt.Rows[i].ItemArray[j] = "My New Value"; Debug.WriteLine("val: {0}, new: {1}", val, dt.Rows[i].ItemArray[j].ToString()); } }
尝试在进行任何更改之前将readonly设置为false
dt.Rows [i] .ReadOnly = false
或仅限细胞
dt.Rows [i] .ItemArray [j] .ReadOnly = false(不确定)
这将无法正常工作,因为您正在修改数据的图像
ds.Tables [0] .Rows [0] .ItemArray [1] =“新数据”
这会奏效
ds.Tables [0] .Rows [0] .Item [1] =“新数据”;
确保你不使用itemarray,而是使用item。 这是针对vb.net的