2017-07-08 12 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を使用するように変更し、まだそれを行い、なぜ私は知らない。私は基本的な問題は、あなたが文字列としてDayVisitedの値を読むことで、ファイルに

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

をユーザー入力を追加する方法

。したがって、"100" < "20"の比較は、文字列の比較では真であることが分かります。これにより、行が結果に含まれます。正しく値を比較するために、あなたが前に整数に変換する必要が

:しかし

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

、あなたのXMLファイルは、先頭にDayVisitedのためにデータのない行が含まれているとして、あなたが準備する必要があり無効なデータの場合したがって、無効な行を除外する前に、文字列の長さをチェックする必要があります。

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

あなたは結果に空の行を含める場合は、TRUEFALSEを変更します。

+0

それでも10,18,15,101,10240のような数字が表示されます。2 –

+0

どのようにデータテーブルを作成しますか?あなたはデータベースからそれを読むのですか、それとも手動で設定しますか?それはまだ文字列の比較を行っているように見えます。 – Markus

+0

あなたの質問をより詳細に説明できますか? –

関連する問題