Почему у меня не перелезают данные из DataTable в DataGridView?

342
19 июня 2017, 18:48
    DataAdapter = new MySqlDataAdapter("Select * from " + SelectObject.Text + ";", MyLib.MyConnection); //Создаём адаптер-посредник
    CommandBuilder = new MySqlCommandBuilder(DataAdapter); // Для адаптера доступно UPDATE
    dTable = new DataTable();
    this.dGrid1.DataSource = dTable;
    MyLib.MySQLOpen();
    dTable.Clear();
    DataAdapter.Fill(dTable); // Всасываем данные из адаптера в dTable
    int NRows = dTable.Rows.Count, NColumns = dTable.Columns.Count; // Как в БД
    int NRows2 = dGrid1.Rows.Count, NColumns2 = dGrid1.Columns.Count; // <b>Нули!!!</b>
    dGrid1.DataSource = dTable; // Связываем данные с демонстрируемым элементом dGrid1 формы 
    MyLib.MySQLClose();
Answer 1

Здравствуйте. Возможно, этот полный пример поможет Вам разобраться с Вашим вопросом. Мне кажется в простом, но полном примере проще разобраться, чем в отрывке кода. Есть Excel файл, который заполнен данными. Программа считывает эти данные и заполняет многострочное текстовое поле и DataGridView.

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//подключить пространство имен
using System.Data.OleDb;
namespace _0003 {
 public partial class Form1 : Form {
  string connectionString = null;
  OleDbConnection connection;
  string sql = null;
  public Form1() {
   InitializeComponent();
   textBox1.ReadOnly = true;
  }
  private void button1_Click(object sender, EventArgs e) {
   openFileDialog1.DefaultExt = "*.xlsx;*.xls";
   openFileDialog1.Filter = "Excel 2007 и выше(*.xlsx)|*.xlsx|Excel 2003(*.xls)|*.xls";
   openFileDialog1.Title = "Выберите документ для загрузки данных";
   openFileDialog1.FileName = "";
   if(openFileDialog1.ShowDialog() == DialogResult.OK) {
    textBox1.ReadOnly = false;
    textBox1.Text = openFileDialog1.FileName;
    connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + @";Extended Properties=""Excel 12.0 Xml; HDR = YES"";";
    using(connection = new OleDbConnection(connectionString)) {
     try {
      connection.Open();
      //получаем список листов в Excel файле
      DataTable schemaTable = connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
      //выбираем название первого листа
      string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];
      sql = String.Format("SELECT * FROM [{0}]", sheet1);
      //заполняем многострочное поле
      OleDbCommand cmd = new OleDbCommand(sql, connection);
      OleDbDataReader reader = cmd.ExecuteReader();
      while(reader.Read()) {
       textBox2.Text += " " + reader[0] + " " + reader[1] + " " + Math.Round(decimal.Parse(reader[2].ToString()), 2).ToString() + " " + "\r\n";
      }
      //заполняем таблицу
      //при помощи класса OleDbDataAdapter и его метода Fill данные загружаются в Dataset
      System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(sql, connection);
      DataSet ds = new DataSet();
      ad.Fill(ds);
      //создаем таблицу, которая будет источником данных для таблицы dataGridView
      DataTable tb = ds.Tables[0];
      dataGridView1.DataSource = tb;
     }
     catch(Exception exc) {
      MessageBox.Show("Ошибка соединения!\n" + exc);
     }
     finally {
      connection.Close();
     }
    }
   }
  }
 }
}

Answer 2

Когда я пересоздал Windows Form приложение "с нуля", отказавшись от всяких примочек/мастеров Studio для связи с БД, всё заработало. На это решение меня натолкнуло то, что ранее подобный код нормально работал в случае с БД SQLite без этих примочек. Всё же спасибо за подсказку.

READ ALSO
Запись данных в таблицу Oracle

Запись данных в таблицу Oracle

ЗдравствуйтеЗаписываю xml-файл в таблицу Oracle

296
Консольное приложение Net Core использует библиотеку классов Net Standart?

Консольное приложение Net Core использует библиотеку классов Net Standart?

Консольное приложение Net Core использует библиотеку классов Net Standart?

244
Ипользование таймер в коде c#

Ипользование таймер в коде c#

ЗдравствуйтеВобщем у меня есть база данных Oracle

390