2014-09-03 156 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]); 
    } 
} 
相關問題