我最初使用Excel工作表中的數據填充我的DataGridView。從Excel中使用ComboBox中的選定工作表填充DataGridview
private void btnChooseAndRead_Click(object sender, EventArgs e)
{
Refresh();
string filePath = string.Empty;
string fileExt = string.Empty;
OpenFileDialog file = new OpenFileDialog();//open dialog to choose file
if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK)//if there is a file choosen by the user
{
filePath = file.FileName;//get the path of the file
fileExt = Path.GetExtension(filePath);//get the file extension
if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0)
{
try
{
cmbSheetName.Text = "";
cmbSheetName.Items.Clear();
string[] names = GetExcelSheetNames(file.FileName);
//Populate Combobox with Sheet names
foreach (string name in names)
{
cmbSheetName.Items.Add(name);
}
DataTable dtExcel = new DataTable();
dtExcel = ReadExcel(filePath, fileExt); //read excel file
cmbSheetName.Visible = true;
lblFileName.Text = file.SafeFileName.ToString();
BindingSource theBindingSource = new BindingSource();
dgvViewData.Visible = true;
dgvViewData.DataSource = dtExcel;
//dgvViewData.ColumnDisplayIndexChanged = true;
//cmbSheetName_SelectedIndexChanged(sender, e);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
else
{
MessageBox.Show("Please choose .xls or .xlsx file only.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);//custom messageBox to show error
}
}
}
public DataTable ReadExcel(string fileName, string fileExt)
{
string conn = string.Empty;
DataTable dtexcel = new DataTable();
if (fileExt.CompareTo(".xls") == 0)//compare the extension of the file
conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';";//for below excel 2007
else
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";//for above excel 2007
using (OleDbConnection con = new OleDbConnection(conn))
{
try
{
OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con);//here we read data from sheet1
oleAdpt.Fill(dtexcel);//fill excel data into dataTable
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
return dtexcel;
}
需要發生的事情是,當用戶從組合中選擇例如「Sheet5」時,我想用所選工作表詳細信息刷新Gridview。我該怎麼做呢?我怎麼知道所有表都在Gridview中?
創建一個程序,而不是打開Excel文件並初始化DataSet(或列表),每個工作表有一個DataTable。當您選擇特定工作表時,只需更改DataGridView.DataSource即可。 –
Graffito
@Graffito聽起來好像會起作用,你可以請進一步幫忙。我是否廢除我所有的讀取方法?或者我仍然可以編輯它...如果你有一些代碼請分享。 –
只需將dtexcel定義爲列表(該變量應該屬於表單並被初始化爲空)。在ReadExcel中(這將返回列表),在表單上循環,直到初始化* oleDbAdapt = OleDbDataAdapter(「select * from [Sheet] + sheetIndex +」1 $]「,con)*時出現錯誤/異常。只有在dtexcel爲空的情況下才能調用ReadExcel,否則數據表保留並且很容易用作DataSource。在處理另一個excel文件之前,請將dtexcel重置爲null。 –
Graffito