首页 > 解决方案 > 如果我想搜索特定名称、所属团队(组合框)、性别和活动,如何在 datagridview 中过滤数据?

问题描述

假设我的数据库中有 5 个成员,成员 1 是活跃的男性,属于湖人队,成员 2 是不活跃的女性,也属于湖人队,成员 3 是活跃的女性,属于休斯顿队,成员 4 是男性,属于休斯顿队。如何过滤数据,所以如果我单击男性,datagridview 将显示所有男性成员,如果我单击男性并激活,如果我在文本框中输入名称 David 并选择湖人队并选中单选按钮,则 datagridview 将显示所有活动男性成员男性仅在 datagridview 中显示该成员?下面的代码是我到目前为止所完成的。

在这里你可以看到我正在尝试做的过滤器的设计。

在此处输入图像描述

 private void Filtriraj_clanove_Click(object sender, EventArgs e)
        {
            (baza_filter_clanova.DataSource as DataTable).DefaultView.RowFilter = string.Format("ime LIKE '{0}%' OR prezime LIKE '{0}%'", pretraga_ime_prezime.Text);
        }

标签: c#.netwinforms

解决方案


我会做这样的事情,您可以在其中使用您要过滤的所有属性(名称、性别、状态)为 RowFilter 构建过滤器表达式

private void Filtriraj_clanove_Click(object sender, EventArgs e)
{
    // Read name/gender/status from the UI
    var name = pretraga_ime_prezime.Text;
    var sekcija = cmbSekcija.Text;
    var active = optStatus.SelectedIndex == 0 ? true : false; // True for active, False for inactive

    // Get datasource
    var dtSource = baza_filter_clanova.DataSource as DataTable;

    var sbFilter = new StringBuilder();
    // Filter name
    sbFilter.AppendLine($"(ime LIKE '{name}%' OR prezime LIKE '{name}%') AND ");
    // Filter active
    sbFilter.AppendLine($"(status = '{active}') AND ");
    // Filter male/female
    sbFilter.AppendLine($"(sekcija = '{sekcija}') ");

    // Apply row filters
    dtSource.DefaultView.RowFilter = sbFilter.ToString();
}

推荐阅读