根据多个条件过滤服务器

时间:2016-07-22 14:32:18

标签: c# database winforms access

我有一个包含游戏及其服务器的数据库。我想让我的程序根据游戏和服务器位置以及游戏类型过滤数据库,但我似乎没有达到我的目标:(。 例如,我希望它显示位于英国(在数据库内)的Minecraft服务器

我正在构建一个Windows Forms应用程序。

这是代码的一部分:

private void filter(string cOULMN,TextBox box)
{
   DataView dvtble = tbl1.DefaultView;
   dvtble.RowFilter = (cOULMN+ " like '%" + box.Text + "%'");
}

private void button1_Click(object sender, EventArgs e)
{
     filter("Game", textBox4);
     filter("Location", textBox3);
     filter("Game Type", textBox2);
}

1 个答案:

答案 0 :(得分:1)

首先,我会创建一个类来保存所有数据库信息

public class Games
{
    public int ID { get; set; }
    public string GameName { get; set; }
    public string ServerLocation { get; set; }
    public string IP { get; set; }
}

接下来,我会创建一个Games列表来保存所有数据库项目

private List<Games> Game = new List<Games>();

从这里使用数据库中的信息填充List。有很多方法可以做到这一点。这只是一个选择。

foreach (DataRow d in DataTableGames.Rows)
{
    Games g = new Games();
    g.ID = d.Field<int>("ID");
    g.GameName = d.Field<string>("Game");
    g.ServerLocation = d.Field<string>("ServerLocat");
    g.IP = d.Field<string>("iP");
    Game.Add(g);
}

使用数据库中的所有字段填充列表后,可以使用LINQ进行本质过滤。在我的例子中,我使用了一个像你原来那样的按钮,但是我将我的数据网格视为可见性。你可以用它做任何事情。

我也只使用ServerLocation文本框和GameName文本框进行过滤。您可以决定使用LINQ查询过滤的内容和方式。 LINQ比这个示例节目强大得多。

private void btnFilter_Click(object sender, EventArgs e)
{
    dataGridView1.DataSource = Game.Where(l => l.ServerLocation.ToUpper() == txtLocationFlt.Text.ToUpper() 
                                            && l.GameName.ToUpper() == txtGameFlt.Text.ToUpper()).ToList();
}