数据网格行过滤 return 小于

Data grid row filter return less than

当我 运行 过滤我的 xml 文件时,它 return 所有行甚至高于给定数量的行。

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>

我怎样才能让 return 只有 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;
}

基本问题是您将 DayVisited 的值作为字符串读取。因此,在字符串比较中,"100" < "20" 的比较结果为真。这导致该行被包含在结果中。

为了正确比较值,必须先将其转换为整数:

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

但是,由于您的 XML 文件包含一行开头没有 DayVisited 的数据,因此您必须为无效数据做好准备。因此,您必须在排除无效行之前检查字符串的长度:

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

如果要在结果中包含空行,请将 FALSE 更改为 TRUE