2017-07-08 40 views
1

當我跑這來過濾我的XML文件,它返回的所有行甚至超過了一定量的高。數據網格行過濾返回小於

DataSet ds = new DataSet(); 



ds.ReadXml("Database.xml"); 

string filter = ""; 
filter = "Dayvisited <= '20'"; 

DataView dv = new DataView(ds.Tables[0]); 
dv.RowFilter = filter; 
dataGridView2.DataSource = dv; 
dataGridView2.Columns[4].Visible = false; 

這是我的XML

<root> 
    <place> 
    <Name /> 
    <Location /> 
    <Info /> 
    <Dayvisited /> 
    <userdata /> 
    </place> 
    <place> 
    <Name>home</Name> 
    <Location>x-292 z 277</Location> 
    <Info>home</Info> 
    <Dayvisited>100</Dayvisited> 
    <userdata>u</userdata> 
    </place> 
    <place> 
    <Name>base</Name> 
    <Location>x868 z986</Location> 
    <Info>stuff</Info> 
    <Dayvisited>20</Dayvisited> 
    <userdata>u</userdata> 
    </place> 
    <place> 
    <Name>town</Name> 
    <Location>x 990 z-2485</Location> 
    <Info>gas station</Info> 
    <Dayvisited>12</Dayvisited> 
    <userdata>u</userdata> 
    </place> 
    <place> 
    <Name>crossing</Name> 
    <Location>x 90 z-2998</Location> 
    <Info>working stiff</Info> 
    <Dayvisited>11</Dayvisited> 
    <userdata>u</userdata> 
    </place> 
    <place> 
    <Name>home</Name> 
    <Location>x-280 z 277</Location> 
    <Info>home and more stuff</Info> 
    <Dayvisited>125</Dayvisited> 
    <userdata>u</userdata> 
    </place> 
</root> 

我怎樣才能使它只能與Dayvisited返回那些比20到數據網格少?我想用文本框的值混淆的東西,所以我改成了只使用20和它仍然沒有它,我不知道爲什麼。

我怎麼用戶輸入添加到文件

try 
{ 

DataRow dr = ds.Tables[0].NewRow(); 
dr["Name"] = Nametb.Text; 
dr["Location"] = Locationtb.Text; 
dr["Info"] = Infotb.Text; 
dr["Dayvisited"] = dayvisitcb.Text; 
dr["userdata"] = "u"; 
ds.Tables[0].Rows.Add(dr); 
ds.WriteXml("Database.xml"); 

} 
catch (Exception) 
{ 
throw; 
} 
+0

你試過' 「Dayvisited <= 20」'? – Alberto

+0

是的,它說這個,「無法在System.String和System.Int32執行‘<=’操作。」 –

+0

您可以添加讀取數據的代碼放到'DataSet'?看起來你將'DayVisited'的值存儲爲一個字符串。這導致「100」按字母順序小於「20」。這就是顯示所有記錄的原因。 – Markus

回答

1

的基本問題是,你看作爲一個字符串的DayVisited值。因此,比較"100" < "20"在字符串比較中證明是正確的。這導致該行被包含在結果中。

爲了正確比較值的,你必須之前將它轉換爲整數:

filter = "Convert(Dayvisited, System.Int32) <= 20" 

然而,當你的XML文件中包含開頭爲DayVisited沒有數據的行,你必須準備無效的數據。因此,你必須檢查字符串的長度之前排除無效的行:

filter = "IIF(LEN(DayVisited) = 0, FALSE, Convert(Dayvisited, System.Int32) <= 20)" 

如果您要包括在結果中的空行,改變FALSETRUE

+0

它仍然認爲像10,18,15,101,10240數字如下2 –

+0

如何創建數據表?你從數據庫中讀取它還是手動設置它?看起來它仍在進行字符串比較。 – Markus

+0

你能解釋一下你的問題嗎? –