C# 将excel文件移动到datagridview

C# 将excel文件移动到datagridview,c#,C#,我有2列的excel文件(empid,empname),我必须先读取第1列的8行,然后读取第2列的8行,通过下面的代码,我得到第一列的8行,但在第二列的行或不填充,而它们只填充第一列的行。这是我的密码 for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++) { if (Cnum == 1) {

我有2列的excel文件(empid,empname),我必须先读取第1列的8行,然后读取第2列的8行,通过下面的代码,我得到第一列的8行,但在第二列的行或不填充,而它们只填充第一列的行。这是我的密码

             for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++)
             {

                 if (Cnum == 1)
                 {
                     dt.Columns.Add((ShtRange.Cells[1, Cnum] as Excel.Range).Value2.ToString());
                     for (int Rnum = 1; Rnum <= 9; Rnum++)
                     {

                         dt.Rows.Add((ShtRange.Cells[Rnum, 1] as Excel.Range).Value2.ToString());

                     }
                 }}
             for (int Cnum = 1; Cnum <= ShtRange.Columns.Count; Cnum++)
             {
                  if (Cnum == 2)
                 {

                     dt.Columns.Add((ShtRange.Cells[1, Cnum] as Excel.Range).Value2.ToString());


                     for (int Rnum = 1; Rnum <= 9; Rnum++)
                     {
                         dt.Rows.Add((ShtRange.Cells[Rnum,2] as Excel.Range).Value2).ToString();
                     }
                 }
             }

用于(int Cnum=1;Cnum如果我理解正确,问题是excel文档中第二列的值不会出现在
DataGridView
控件的第二列中。这个问题源于填充网格的方式,因为您的代码实际上是将为第一列提供的值附加到行中仅限umn。以下是您的问题的简短解决方案:

dt.Columns.Add("c1", "First column");
dt.Columns.Add("c2", "Second column");
for (int Rnum = 1; Rnum <= 9; Rnum++)
{   
    dt.Rows.Add(
            (ShtRange.Cells[Rnum, 1] as Excel.Range).Value2.ToString(), 
            (ShtRange.Cells[Rnum, 2] as Excel.Range).Value2.ToString());
}

另一个完全不同的解决方案是查看OleDbConnection提供程序,将整个Excel文件加载到DataTable中,然后直接将DataTable绑定到DataGridView

            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });////gets the table from the tempFile

            List<DataTable> listInnerTable = new List<DataTable>();

            foreach (DataRow dr in schemaTable.Rows)
            {
                DataTable innerTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, dr.ItemArray[2], null });
                listInnerTable.Add(innerTable);
            }
这样,它将处理不同的Excel文件或添加到您正在使用的Excel文件中的新列。

Excel文件的时间是?(.csv、.xls、.xlsx)
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });////gets the table from the tempFile

            List<DataTable> listInnerTable = new List<DataTable>();

            foreach (DataRow dr in schemaTable.Rows)
            {
                DataTable innerTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, dr.ItemArray[2], null });
                listInnerTable.Add(innerTable);
            }
myGridView.DataSource = listInnerTable;
myGridView.DataBind();