2016-11-14 13 views
0

私はmysqlデータベースのすべてのユーザーを含むdatagridviewを持っています。私の問題では、MySQLの行数に基づいて行を追加しますが、データは表示されません。下の画像を参照してください(私は、データベース内の2行を持っている):C# - DatagridviewにはMySQLのデータが表示されません

using MySql.Data.MySqlClient; 

namespace SampleDatabaseQueries 
{ 
    public partial class Main : Form 
    { 
     public Main() 
     { 
      InitializeComponent(); 
     } 

     MySqlConnection conn; 
     MySqlCommand cmd; 
     private void Main_Load(object sender, EventArgs e) 
     { 
      string connString = "server=localhost;user=root;password=;database=test_db"; 
      conn = new MySqlConnection(connString); 

      showData(); 
     } 

     public void showData() 
     { 

      string query = "SELECT * FROM test_db.users;"; 
      cmd = new MySqlCommand(query, conn); 

      conn.Open(); 
      MySqlDataAdapter adapter = new MySqlDataAdapter(); 
      adapter.SelectCommand = cmd; 
      DataTable dTable = new DataTable(); 
      adapter.Fill(dTable); 

      dgUsers.DataSource = dTable; 

      conn.Close(); 
     } 
    } 
} 

EDIT:

screenshot

ここで私が試した私のコードはコードが動作する上で、データがすでにロードされましたが、それは追加されます別のコラムでは、私は最初に見ていませんでした(上記のスクリーンショットで長い水平スクロールを見ることができます)。それを解決するために、私は私が手動で追加した列を削除し、私にクエリを変更:

SELECT username AS Username, password AS Password FROM test_db.users; 

ありがとうございます!

+0

私はデバッガのDataTableを見て、列名がテーブルプロパティのソース列名と一致することを確認します。 –

+0

クラスレベルのコマンドや接続も使用しません。必要なときにそれらを作成し、もはや不要になったときにそれらを破棄します(例外がスローされた場合でも)。これを行う便利な方法は、 'using'ブロックを使うことです。 –

+0

の名前は同じです。あなたは私が行うすべてのメソッドにmain_loadからconnString、connなどを作成するだけでいいのですか? – user6583346

答えて

0

これを置き換えます

MySqlDataAdapter adapter = new MySqlDataAdapter(); 

で:あなたは、データベース接続のクラスを作ることができ、さらなる改善のために

using (MySqlDataAdapter reader = new MySqlDataAdapter(cmd)) 
{ 
    adapter.Fill(dTable); 
} 

EDIT

、私はあなたは、MySQLコネクタからを使用していると仮定しますoracleので、これを行う方法に関するドキュメントをチェックアウトすることができます。ここでは、DataTableのを接続し、充填などの最も基本的なことを始めることができますリンクです:あなたは私のソリューションが動作しませんでした言ったようMySql connector documentation

EDIT 1

が、ここで私はちょうどテストした別のものですうまくいくはずです。

DataTable dTable = new DataTable(); 
conn.Open(); 
string query = "SELECT * FROM test_db.users;"; 
MysqlCommand cmd = new MySqlCommand(query, conn); 
using (MySqlDataAdapter reader = new MySqlDataAdapter(cmd)) 
{ 
    adapter.Fill(dTable); 
} 
dgUsers.DataSource = dTable; 
conn.Close(); 

これは動作するはずです。データテーブルに行が表示されない場合(空の行は何かが見つかったことを意味します)、別の問題があります。データベースが空である可能性があります。

+0

ありがとう、私のコードはこのようになった:DataTable dTable = new DataTable(); using(MySqlDataAdapter adapter = new MySqlDataAdapter(cmd)) { adapter.Fill(dTable); } dgUsers.DataSource = dTable;データグリッドにはまだデータが表示されません。 – user6583346

+0

良い改善の間に、私はこれが潜在的な問題を解決することを非常に疑う。 –

+0

@ EDIT 1、まだ何も表示されていません(私のデータベースには3つの空行が2行あり、もう1つはDataGridの自動ロード行などです)Main_LoadでshowData()を削除すると、datagridviewは1行しか表示せず、これはデフォルトであるため、データベースからデータを取得していることがわかりますが、表示されません。私のデータベースは空ではない、私はそのDatagridviewのプロパティの設定がわからない? – user6583346

関連する問題