2014-09-03 242 views
1

我有一个应用程序,它将用户选择的值存储到我的数据集填充的数据表中的值。根据这个比较,我需要在表格中设置另一列。但是比较不起作用。它总是返回false,而不是输入if条件。将数据行值与字符串进行比较if

foreach (DataRow dr in dsQuestions.Tables[0].Rows) 
{ 
    if (dr["Data"] == indicater[0]) 
    { 
     dr["IsSelected"] = true; 
    } 
} 

indiactor[0]是一个字符串数组和dr["data"]是字符串类型也但它表明它需要一个字符串类型的警告。

+0

你AFAIR你不能用'字符串比较有用的=='你需要使用'equals' – 2014-09-03 07:18:07

+0

'indicator [0]'是一个字符串数组,而'dr [data]'是一个字符串?你确定这是正确的吗? – Sayse 2014-09-03 07:18:49

回答

0

首先字符串使用==你应该使用无法比拟的equals方法:

foreach (DataRow dr in dsQuestions.Tables[0].Rows) 
      { 
       if (dr["Data"].tostring().Equals(indicater[0])) 
       { 
        dr["IsSelected"] = true; 
       } 
0

试试这个:

foreach (DataRow dr in dsQuestions.Tables[0].Rows) 
        { 
         if (dr["Data"].tostring() == indicater[0].tostring()) 
         { 
          Convert.toBoolean(dr["IsSelected"].tostring()) = true; 
         } 
+0

我敢肯定,它不会编译,因为你不能分配一个值布尔 – Sayse 2014-09-03 07:23:02

5

DataRow索引该索引处返回字段为object不是string

我会建议使用强类型Field -extension方法,它也支持nullables:

if (dr.Field<String>("Data") == indicater[0]){} 

...和SetField方法也支持可空类型:

dr.SetField("IsSelected", true); 

更新如果indicater[0]确实是string[](而不是单个string),那么如何比较字符串与字符串[]?比如你要检查,如果数组包含此数据:

if (indicater[0].Contains(dr.Field<String>("Data"))){} 

这也可以解释为什么它从来没有进入if:因为==只能通过平等比较字符串,其他类型的不具有覆盖了== - 操作员将只比较参考。 A stringstring[]决不相同。但是,您不会收到编译时错误,因为您可以将object与其他所有内容进行比较。

+0

OP指出'Indicator [0]'是一个字符串数组,所以也许不是正确的检查.. – Sayse 2014-09-03 07:19:47

+1

@Sayse:我怀疑它确实是一个数组。但是,我添加了一种可能的方法来检查数据是否在数组中。 – 2014-09-03 07:23:47

+0

同意 - 无论如何+1。 – Sayse 2014-09-03 07:24:17

0

可能对

DataRow[] result = table.Select("Id = 1"); 
foreach (DataRow row in result) 
{ 
    if (row[0].Equals(indicater[0])) 
    { 
     //IsSelected 
     row[1]=true; 
     Console.WriteLine("{0}", row[0]); 
    } 
} 
相关问题