にDataGridView
バインドがありDataSet
、一部の値(名前)にアクセントがあり(例:é、í、ž、ć、é、á)、アクセントの影響を受けないフィルタリングを実行します。
通常、私は次の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
);
これで
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.Normalizeメソッドを使用して、文字列を正規化し、アクセントを削除します。次に、正規表現を使用してすべての発音区別符号を削除します。M
あるUnicodeのカテゴリは、「すべての分音記号」。
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 + "%'";
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加