2011-06-06 48 views
0

我真的很難弄清楚DataTable的Select方法正在發生什麼。下面是我回到一個DataTable中的數據,稱爲VotePeriodsDataTable - 只選擇查找行數小於10的行嗎?

PeriodIDDescription

11Test 11

10Test 10

9Test 9

...

...

1Test1

這裏的選擇基於PeriodID期間代碼:

if (VotePeriods.Rows.Count > 0) 
{ 
    DataRow[] vp = VotePeriods.Select("PeriodID = " + voteperiod); 

    if (vp.Length > 0) 
    { 
     return vp[0]; 
    } 
} 

出於某種原因,如果voteperiod是9個或更少,那麼我有正確的行選擇。但是如果我通過1011,我沒有數據返回,即使在我的DataTable中,PeriodID 1011存在。任何建議?

謝謝。

+0

我測試你的代碼,它可以工作在PeriodID = 10和11我也看不出有什麼不妥的地方 - 它應該工作,如果沒有 - 問題一定是別的地方在你的代碼。 – mj82 2011-06-06 22:34:39

+0

問題是'PeriodID'是String而不是int!謝謝大家。 – Saxman 2011-06-06 22:43:33

回答

2

希望將工作。請記住,在使用DataTable的select方法時總是爲值添加單引號。

if (VotePeriods.Rows.Count > 0) 
{ 
    DataRow[] vp = VotePeriods.Select("PeriodID = '" + voteperiod +"'"); 

    if (vp.Length > 0) 
    { 
     return vp[0]; 
    } 
} 
0

您是否嘗試過使用LINQ來選擇?我以前用DataTable.Select運氣不好。

if(VotePeriods.Rows.Count > 0) 
{ 

     var vp = from x in VotePeriods.AsEnumerable() 
       where x["PeriodID"] == voteperiod 
       select x; 

} 
0

確保您PeriodID列的數據類型是數字,如int:下面

VotePeriods.Columns.Add("PeriodID", typeof(int)); 
+1

@downvoter:嗯,根據OP的評論我的回答是正確的,但你DVed它。 – 2011-06-06 22:57:20