我有一个数据表,我试图使用每个循环和一个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++;
}
答案 0 :(得分:0)
对于初学者来说,变量x
是多余的。您可以简单地参考:
if (myRow.ItemArray.GetValue(1).ToString()=="IP")
这应该可以减少代码中的一些混淆。
在if
语句上放置一个断点,以查看循环的每次迭代中GetValue(1).ToString()
的实际值。您可能正在检索错误的值。
答案 1 :(得分:0)
确保您正在初始化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.
}
}
答案 2 :(得分:0)
阵列的价值是多少?它真的是“IP”吗?或者它是以下之一:“ip”,“Ip”,“iP”?如果案例无关紧要,可能会对字符串上的.ToUpper()有帮助。
回答第二个问题:如果您使用数据适配器,那么您只需填充数据集并拉出数据集中的第一个表。
DataSet ds = new DataSet();
dataAdapter.fill(ds);
DataTable myTable = ds.Tables[0];
答案 3 :(得分:0)
C#区分大小写,因此很可能实际值不是大写“IP”,或者可能包含空格等。尝试与string.Compare进行比较,使用重载版本,您可以在其中为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”变量在您的示例中不提供任何功能。
答案 4 :(得分:0)
原来我需要添加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();
}
}