c# - 如果我想搜索特定名称、所属团队(组合框)、性别和活动,如何在 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);
}
解决方案
我会做这样的事情,您可以在其中使用您要过滤的所有属性(名称、性别、状态)为 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();
}
推荐阅读
- qt - 如何防止在 TextEdit QML 中输入空格?
- python - 在函数中定义 Tkinter 小部件,但在其他地方引用它
- amazon-web-services - 如何检查未使用的 AWS 运行实例
- opengl - 来自 World Machine 的纹理在 OpenGL 中无法正确渲染
- flutter - /bin/sh: /packages/flutter_tools/bin/xcode_backend.sh: github 操作中没有这样的文件或目录
- python - 如何从数组列表中提取特定条目?
- firebase - Flutter Firebase消息迁移遇到问题]:
- php - 添加发票项目适用于条纹 SDK,但不适用于 Laravel 收银员
- python - 带有文件 I/O 的 Python If/Else 逻辑
- amazon-web-services - 使用 terraform 和 localstack 创建 aws_dynamodb_table 需要很长时间