[ADO]特定の列の重複を除いた行を表示する
特定の列の重複を除いた行を表示する。
データを単純にバインドするだけでは、前回 のようにすべての行データが表示され、重複した
データが存在することになる。
このようなデータから、重複を除いたデータを抽出するためには、DataViewクラスを使用する。
(データベースからのSELECT 文の時点でdistinctを使用してもよいが、抽出条件を変えたい時には
またデータベースにアクセスしないといけなくなるので、トランザクションが増えることになる。
データは必要なときに一気に取得し、キャッシュしたデータの中から抽出操作を行ったほうがよいでしょう。)
string connectionString = "略";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("SELECT * FROM Employees", connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
using (DataTable table = new DataTable())
{
table.Locale = CultureInfo.InvariantCulture;
try
{
adapter.Fill(table);
}
catch (SqlException)
{
}
using (DataView view = new DataView(table))
{
comboBox1.DataSource = view.ToTable(true, "City");
comboBox1.DisplayMember = "City";
}
}
DataViewのコンストラクタにDataTableを渡し、ToTable()メソッドの第一引数(distinct)にtrueを設定する。
第二引数に、重複を除く列名を指定すれば、重複が除かれたDataTableが生成される。
それを、コンボボックスにバインドすると、次のような結果となる。
前回 とちがい、London のデータが重複していないことがわかる。