迭代数据表并使用if语句修改值
本文关键字:语句 修改 if 数据表 迭代 | 更新日期: 2023-09-27 18:09:05
我有一个数据表,我试图使用一个for每个循环和一个if语句来修改某些值,但是每当我尝试使用if语句时,什么都不会发生。如果我删除If语句它显然会改变每一行
我做错了什么?我在ItemArray.GetValue()上尝试了不同的值,仍然没有运气。
int x = 0;
foreach ( DataRow myRow in dt.Rows )
{
if (dt.Rows [x].ItemArray.GetValue(1).ToString()=="IP")
{
myRow.BeginEdit ( );
myRow [ "grd" ] = " ";
myRow.EndEdit ( );
}
x++;
}
对于初学者来说,变量x
是多余的。你可以参考:
if (myRow.ItemArray.GetValue(1).ToString()=="IP")
这样可以减少代码中的一些混乱。
在if
语句上放置一个断点,以查看每次循环迭代中GetValue(1).ToString()
的实际值。您可能正在检索错误的值。
确保正在初始化DataTable列,更重要的是确保在index = 1处插入值。我运行了下面的代码,计算"if"语句没有任何问题。我还删除了您正在使用的计数器,因为在这个特定的循环中不需要它,因为您可以直接访问每行的ItemArray。
DataTable table = new DataTable();
table.Columns.Add("ID"); //Allows for storage at GetValue(0)
table.Columns.Add("NAME"); //Allows for storage at GetValue(1)
//GetValue(0) will return 128|256; GetValue(1) will return IP | OP.
table.Rows.Add(new object[] {"128", "IP"});
table.Rows.Add(new object[] {"256", "OP"});
foreach(DataRow row in table.Rows)
{
string name = row.ItemArray.GetValue(1).ToString();
if(name == "IP")
{
Console.WriteLine("IP was found");
//Of course do your edits here.
}
}
数组的值是什么?这真的是"IP"吗?还是下面的其中一个:"ip", "ip", "ip" ?如果大小写无关紧要,对字符串使用. toupper()可能会有所帮助。
回答你的第二个问题:如果你使用数据适配器,那么你可以只填写一个数据集,并取出数据集中的第一个表。
DataSet ds = new DataSet();
dataAdapter.fill(ds);
DataTable myTable = ds.Tables[0];
c#是区分大小写的,所以很可能实际值不是大写的"IP",或者可能包含空格等。尝试与字符串进行比较。比较,使用重载版本,其中可以基于false区分大小写。
顺便说一句,有几种检查值的方法可以更简洁一些。
首先,您可以使用DataTable公开的Select方法将行筛选为仅在索引1处的列中值为"IP"的行。您将需要使用列名,因此我假设在本例中列名为"Column1":
foreach ( DataRow myRow in dt.Rows.Select("Column1 = 'IP'") )
{
myRow.BeginEdit();
myRow["grd"] = " ";
myRow.EndEdit();
}
或者,您可以使用LINQ语句,如下所示:
foreach (DataRow myRow in dt.Rows.Cast<System.Data.DataRow>().Where(r => string.Compare(r[1].ToString(), "IP", true) == 0)
{
myRow.BeginEdit();
myRow["grd"] = " ";
myRow.EndEdit();
}
正如Hand-E-Food所指出的,"x"变量在您的示例中没有提供任何功能。
原来我需要添加trim(),它工作。
foreach ( DataRow row in dt.Rows )
{
string name = row.ItemArray.GetValue ( 2 ).ToString ( ).ToUpper().Trim();
if ( name == "IP" )
{
row.BeginEdit();
row [ "grd" ] = "-";
row.EndEdit();
}
}