2017-01-23 5 views
0

Мне нужна помощь, отображающая значения excel в datagridview. Мне удается отображать значения, но некоторые из значений отсутствуют (столбцы и значения строк). I имеет 1000 строк в моем файле excel, и в виде сетки данных отображается только 333 элемента. и у меня есть 148 номеров столбцов, но на нем есть только некоторые из них. может кто-нибудь сказать мне, в чем проблема.Отображение значений excel Workbook в DataGridView C#

вот мой код:

 public partial class MainBagsakan : Form 
    [enter image description here][1] 
     String [email protected]"C:\Users\tjjtabije\Desktop\TestExcelUpdater\TestUnoREFARM.xlsx"; 
     private string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\t-jjtabije\\Desktop\\TestExcelUpdater\\TestUnoREFARM.xlsx;Extended Properties='Excel 12.0 Xml;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text'"; 
     private void WorkOrderTab() 
    { 

     string filePath = Path.GetFullPath(WOmain); 
     string extension = Path.GetExtension(filePath); 
     string conStr, sheetName; 
     conStr = string.Empty; 

     //Get the name of the First Sheet. 
     using (OleDbConnection con = new OleDbConnection(Excel07ConString)) 
     { 
      using (OleDbCommand cmd = new OleDbCommand()) 
      { 
       cmd.Connection = con; 
       con.Open(); 
       DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
       con.Close(); 
      } 
     } 
     using (OleDbConnection con = new OleDbConnection(Excel07ConString)) 
     { 
      using (OleDbCommand cmd = new OleDbCommand()) 
      { 
       using (OleDbDataAdapter oda = new OleDbDataAdapter()) 
       { 
        DataTable dt = new DataTable(); 
        cmd.Connection = con; 
        cmd.CommandText = "SELECT * [" +sheetName+ "]"; 
        con.Open(); 
        oda.SelectCommand = cmd; 
        oda.Fill(dt); 
        con.Close(); 

        //Populate DataGridView. 
        WorkLoadDisp.DataSource = dt; 
        label1.Text = dt.Rows.Count.ToString(); 
       } 
      } 
     } 
    } 
+0

Вы должны установить точку прерывания в 'WorkLoadDisp.DataSource = dt;' и проверить, что находится в 'dt'. Я предполагаю, что вы не можете получать все данные, которые, по вашему мнению, должны. Просто догадка. – JohnG

+0

Привет, сэр. что означает слово «точка останова»? пожалуйста, объясните далее, им жаль, что новое для программирования. и да, я не получаю все данные на excel. спасибо за помощь –

+0

Если вы используете IDE, например Visual Studio, вы можете установить точку останова на строке кода. (rightClick-> Breakpoint) Когда вы запустите код, он перестанет выполняться в точке останова. Когда он останавливается, вы можете проверить свои переменные типа 'dt', чтобы увидеть, что они содержат. Идея заключается в том, что вы указываете на «DataGridView», не отображая должным образом, и это может быть, однако, прежде чем искать проблему «DataGridView» ... убедитесь, что данные, которые вы получаете от excel, верны. Надеюсь, это имеет смысл. – JohnG

ответ

0

Это не требуется открывать и закрывать соединение в два раза, как вы с двумя отдельными использованием положений. Первый просто получает имя вида рабочего листа, так как именованный диапазон также может быть возвращен. Я просто поместил весь код в одну группу и, похоже, работает так, как ожидалось.

Добавлен недостающий FROM для выбора высказывания:

cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; 

изменения, которые я сделал ниже ...

using (OleDbConnection con = new OleDbConnection(Excel07ConString)) { 
    using (OleDbCommand cmd = new OleDbCommand()) { 
    using (OleDbDataAdapter oda = new OleDbDataAdapter()) { 
     cmd.Connection = con; 
     con.Open(); 
     DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
     DataTable dt = new DataTable(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; 
     //con.Open(); 
     oda.SelectCommand = cmd; 
     oda.Fill(dt); 
     con.Close(); 
     //Populate DataGridView. 
     WorkLoadDisp.DataSource = dt; 
     label1.Text = dt.Rows.Count.ToString(); 
    } 
    } 
} 

Надеется, что это помогает.

+0

Спасибо за помощь, сэр! оно работает ! –

+0

Рад, что вы его работали. Как я сказал, будьте осторожны с именованными диапазонами, поскольку это то, что было возвращено с помощью строки: 'sheetName = dtExcelSchema.Rows [0] [" TABLE_NAME "]. ToString();' Создайте именованный диапазон на вашем листе и посмотрите, t получить с приведенной выше строкой. Просто голова. – JohnG

+0

Хорошо сэр Спасибо за головы :) –

Смежные вопросы