对数据中的多列应用过滤器 table
Apply filter on multiple column in data table
我正在使用的代码
(DataGridViewAllMusic.DataSource as DataTable).DefaultView.RowFilter =
string.Format("Title LIKE '%{0}%' or Artist LIKE '%{1}%' or Album LIKE '%{2}%' or
Comments LIKE '%{3}%' ",TextboxSearch.Text, TextboxSearch.Text, TextboxSearch.Text,
TextboxSearch.Text);
工作输出:
假设 datagridview 将歌曲信息显示为(左边是歌曲标题,右边是艺术家)
标题 & 艺术家
柔情似水&三度
我在 TextboxSearch 中输入 Life,datagridview 将显示歌曲的详细信息,因为 Life 是在 DataTable 列 标题
现在,如果我搜索 Degree,再次在 DataTable 列 Artist 中找到 Degree,因此 datagridview 将显示相同的结果
所需过滤器:
现在我也想像歌手和歌名一样的方式搜索歌曲。
这样
三度温柔生活如果我在 TextboxSearch 中搜索这个,datagridview 也应该显示与单独搜索标题或艺术家时显示相同的结果
特别感谢@dr.null。我找到了他的 vb.net 代码并在 c# 中使用。效果很好!
var sb = new StringBuilder();
var cols = new[] { "Title", "Artist" };
var words = TextboxSearch.Text.Split(',').Where(x => x.Trim().Length > 0);
for (var i = 0; i <= cols.Length - 1; i++)
{
for (var j = 0; j <= words.Count() - 1; j++)
{
sb.Append($"{cols[i].Trim()} LIKE '
{words.ElementAt(j).Trim()}%'");
if (j != words.Count() - 1)
sb.Append(" OR ");
}
if (i != cols.Length - 1)
sb.Append(" OR ");
}
(DataGridViewAllMusicDark.DataSource as DataTable).DefaultView.RowFilter =
sb.ToString();
我正在使用的代码
(DataGridViewAllMusic.DataSource as DataTable).DefaultView.RowFilter =
string.Format("Title LIKE '%{0}%' or Artist LIKE '%{1}%' or Album LIKE '%{2}%' or
Comments LIKE '%{3}%' ",TextboxSearch.Text, TextboxSearch.Text, TextboxSearch.Text,
TextboxSearch.Text);
工作输出:
假设 datagridview 将歌曲信息显示为(左边是歌曲标题,右边是艺术家)
标题 & 艺术家
柔情似水&三度
我在 TextboxSearch 中输入 Life,datagridview 将显示歌曲的详细信息,因为 Life 是在 DataTable 列 标题
现在,如果我搜索 Degree,再次在 DataTable 列 Artist 中找到 Degree,因此 datagridview 将显示相同的结果
所需过滤器:
现在我也想像歌手和歌名一样的方式搜索歌曲。
这样 三度温柔生活如果我在 TextboxSearch 中搜索这个,datagridview 也应该显示与单独搜索标题或艺术家时显示相同的结果
特别感谢@dr.null。我找到了他的 vb.net 代码并在 c# 中使用。效果很好!
var sb = new StringBuilder();
var cols = new[] { "Title", "Artist" };
var words = TextboxSearch.Text.Split(',').Where(x => x.Trim().Length > 0);
for (var i = 0; i <= cols.Length - 1; i++)
{
for (var j = 0; j <= words.Count() - 1; j++)
{
sb.Append($"{cols[i].Trim()} LIKE '
{words.ElementAt(j).Trim()}%'");
if (j != words.Count() - 1)
sb.Append(" OR ");
}
if (i != cols.Length - 1)
sb.Append(" OR ");
}
(DataGridViewAllMusicDark.DataSource as DataTable).DefaultView.RowFilter =
sb.ToString();