|
分類:[.NET 全般]
Visual StudioでExcelのデータをDataGridViewに表示するWindowsFormを作成しています。
Excelには複数シートあるためシート名を取得してきてコンボボックスから選択できるようにしました。
シートを選択し検索ボタンを押すと以下のコードが走ります。
private DataTable dt = new DataTable();
--中略
private void button1_Click(object sender, EventArgs e)//検索押下
{
dt.Clear();
GetExcelData();
dataGridView1.DataSource = dt;
}
private void GetExcelData()
{
string sheet = comboBox1.Text;
if (sheet != "")
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
@"C:\Users\flowe\Desktop\ExcelTestData\Summer_Olympic_medallists_1896-2008.xlsx" +
@";Extended Properties=Excel 12.0;";
conn.Open();
//SQL発行
var sqlcmd = $"SELECT * FROM [{sheet}$]";
OleDbCommand cmd = new OleDbCommand(sqlcmd, conn);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
adp.Update(dt);
adp.Fill(dt);
conn.Close();
}
else
{
MessageBox.Show("シートを選択してください");
}
}
1回目の検索ではうまく表示されるのですが、コンボボックスで別のシートを選択してもう一度検索ボタンを押すと1度目に検索したシートのカラム名が残ったままになります。
そしてそのカラムにはすべてデータは空白になり、それに付け加わる形で今回の検索のデータが表示されます。
DataTableのClearではだめなのでしょうか。
DataTableのResetも試しましたがこちらはカラム名はうまく表示されましたが2度目以降の検索でデータが表示されなくなってしまいました。
どなたかご教授頂けないでしょうか。
|