c#如何过滤Datagridview绑定到数据集-重音不敏感
本文关键字:-重 数据集 绑定 Datagridview 何过滤 过滤 | 更新日期: 2023-09-27 18:15:15
我有一个DataGridView
绑定到一个DataSet
,一些值(Name)有重音(例如:
通常我像这样过滤我的DataGridView
:
private void textBox1_TextChanged(object sender, EventArgs e)
{
MyDataSet.People.DefaultView.RowFilter = "Name LIKE '%" + textBox1.Text + "%'";
dataGridView1.DataSource = MyDataSet.People.DefaultView;
}
我试图改变这个在我的数据库:
CREATE TABLE [dbo].[People] (
[Num] INT NOT NULL,
[Name] NVARCHAR (50) NOT NULL
);
by this
CREATE TABLE [dbo].[People] (
[Num] INT NOT NULL,
[Name] NVARCHAR (50) COLLATE Latin1_General_CI_AI NOT NULL
);
并尝试更改:
private void textBox1_TextChanged(object sender, EventArgs e)
{
MyDataSet.People.DefaultView.RowFilter = "Name LIKE '%" + textBox1.Text + "%' COLLATE Latin1_General_CI_AI";
dataGridView1.DataSource = MyDataSet.People.DefaultView;
}
我可以提供以下决定。
为数据表添加名为NameWithoutAccent
的新列。
MyDataSet.People.Columns.Add("NameWithoutAccent", typeof(string));
用已删除重音的值填充此列。筛选将按此列进行。
foreach (DataRow row in MyDataSet.People.Rows)
{
string name = (string)row["Name"];
string nameWithoutAccent = RemoveAccent(name);
row["NameWithoutAccent"] = nameWithoutAccent;
}
首先将字符串规范化以删除string的重音。规范化的方法。然后用正则表达式删除所有的变音符号。M
是Unicode类别"All diacritic marks"。
public string RemoveAccent(string name)
{
string normalizedName = name.Normalize(NormalizationForm.FormD);
string pattern = @"'p{M}";
string nameWithoutAccent = Regex.Replace(normalizedName, pattern, "");
return nameWithoutAccent;
}
在数据绑定后隐藏此列。
dataGridView1.Columns["NameWithoutAccent"].Visible = false;
输入过滤器也从重音中清除。
private void textBox1_TextChanged(object sender, EventArgs e)
{
string nameWithoutAccent = RemoveAccent(textBox1.Text);
MyDataSet.People.DefaultView.RowFilter = "NameWithoutAccent LIKE '%" + nameWithoutAccent + "%'";
}