将Excel表加载到c#WinForms中已初始化的DataGridView中

时间:2016-07-20 06:56:24

标签: c# datagridview

我正在尝试将Excel表格数据附加到DataGridView( dgvInitial )。一开始我正在通过

初始化DGV
private void DataForm_Load(object sender, EventArgs e)
    {
        int column = 100;
        int rows = 1000;

        dgvInitial.AutoGenerateColumns = false;
        for (int i = 1; i <= column; i++)
        {
            dgvInitial.Columns.Add("Col_" + i, "Col_" + i);
            dgvInitial.Columns[i - 1].FillWeight = 1;
        }
        for (int j = 0; j < rows; j++)
            dgvInitial.Rows.Add();

        foreach (DataGridViewColumn col in dgvInitial.Columns)
        {
            col.SortMode = DataGridViewColumnSortMode.NotSortable;
        }
    }

并在 loadToolStripMenuItem_Click 事件中我试图将excel表附加到dgv(从另一个stackoverflow任务使用的源代码,但问题非常不同)

System.Data.OleDb.OleDbConnection MyConnection;
        System.Data.DataSet DtSet;
        System.Data.OleDb.OleDbDataAdapter MyCommand;
        MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Sample.xlsx';Extended Properties=Excel 8.0;");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
        MyCommand.TableMappings.Add("Table", "Net-informations.com");
        DtSet = new System.Data.DataSet();
        MyCommand.Fill(DtSet);
        dgvInitial.DataSource = DtSet.Tables[0];
        MyConnection.Close();

但它只减少了dgv中的行数,我看不到任何数据。当我在DataForm_Load事件中评论所有内容时,它正常工作。

拜托,您有什么想法,怎么能解决这个问题?非常感谢你提前。

1 个答案:

答案 0 :(得分:0)

  

尝试使用此连接字符串格式

     string Connectionstr = "";      
      string filePath ="C:\Sample.xlsx";
      string fileExtension = Path.GetExtension(filePath).ToLower();

      if (fileExtension == ".xls")
      Connectionstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
      if (fileExtension == ".xlsx")
      Connectionstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'";
        MyConnection = new System.Data.OleDb.OleDbConnection(Connectionstr);
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
       MyCommand.TableMappings.Add("Table", "Net-informations.com");
        DtSet = new System.Data.DataSet();
       MyCommand.Fill(DtSet);
       dgvInitial.Columns.Clear();
       dgvInitial.AutoGenerateColumns = true;
       dgvInitial.DataSource = DtSet.Tables[0];
        MyConnection.Close();