2016-12-29 15 views
1

データグリッドにMySQLを入力する簡単なプログラムを作成しました。私のコラムの一つでMySql DataGridViewの情報を変更する

データグリッドは、私がブール値のチェックボックスをオンにしていたクエリを移入したら私はブール(0または1)

を持っています。

誰かがブール値のチェックボックスをオンにしたときに関数の使い方を知っていますか?

要約すると、このチェックボックスをオンにすると、MySQLデータベースのブール値が0から1に変更されます。

私がこの問題を抱えているのは、アプリケーションを実行するまでDatagridにデータが入力されないためです。したがって、私は視覚スタジオでそれを変更する方法を把握することはできません。

はDGVが移入され方法:

MySqlConnection conn = new MySqlConnection(dbConnection); 
conn.Open(); 
MySqlCommand cmd = new MySqlCommand(); 

cmd.Connection = conn; 
MySqlDataAdapter da = new MySqlDataAdapter(); 

//SQL Query String 
string sqlSelectAll = "SELECT * FROM `Tasks` WHERE `Completed` = 0"; 
da.SelectCommand = new MySqlCommand(sqlSelectAll, conn); 

DataTable table = new DataTable(); 
da.Fill(table); 

BindingSource bSource = new BindingSource(); 
bSource.DataSource = table; 

dataGridView1.DataSource = bSource; 

すべてのヘルプは感謝されます。

注:

私はこれとは何の関係もありません完全に異なるエラーになったVS2015でのデータ構成マネージャを使用して試してみました。だからそれは疑問から外れる。

+0

:それはすべてを行う必要であれば、あなたはDbCommandDataReaderを使用することができます。チェックボックスは、データベース内のboolカラムの状態を表します。したがって、フォームがロードされてDGVが生成されるまで、チェックボックスは表示されません。もちろん、* data *を使って何でもすることができますが、それは何であるかはっきりしていません。つまり、「ビジュアルスタジオで変更する」ことです。 – Plutonix

+0

チェックボックスをクリックすると、mysqlデータベース内のブール値を変更します。 だから私はちょうどそうする方法を見つけようとしています。 – Mokey

+0

DataTableをデータソースとして使用して、何かをクリックまたは変更した場合、その変更はDataTableに保存されます.DGVはデータをユーザーに表示する方法です。その後、DataAdapterを使用して、これらの変更がDBに書き戻されます。あなたは手動でDGVを入力していると思いますか? – Plutonix

答えて

1

あなたはDataAdapterが、それはあなたのための基礎となるDataTableに対するすべての変更が適用されることに固執した場合 - 実際に倍数:

はファーストクラスレベルのオブジェクトを再利用する

public partial class Form1 : Form 

    MySQLDataAdapter myDA; 
    DataTable myDT; 
    string dbConnStr = "server=..." 

は、その後、あなたが初期化すべて:

string sql = "SELECT A, B, C, D... FROM `Tasks`"; 

// create the DT 
myDT = new DataTable(); 

// The Adapter can create its own Connection 
//  and SelectCommand 
myDA = new MySqlDataAdapter(sql, dbConnStr); 

MySqlCommandBuilder cb = new MySqlCommandBuilder(myDA); 

// "teach" the DA how to Update and Add: 
myDA.UpdateCommand = cb.GetUpdateCommand(); 
myDA.InsertCommand = cb.GetInsertCommand(); 
myDA.DeleteCommand = cb.GetDeleteCommand(); 

myDA.Fill(myDT); 
myDA.FillSchema(myDT, SchemaType.Source); 

dgv1.DataSource = myDT; 

これで、DGVに必要なすべての列が作成され、行が埋められます。あなたが持っている/知っている部分。値を変更するには2-3のチェックボックスをクリックして、ボタンの押しでこれを追加します。

int rows = myDA.Update(myDT); 

をデバッグの下であなたがrowsの値を調べている場合、それはあなたが変更され、チェックボックスの数だけになります。また、そのアクションが必要な行数をINSERT、DELETEまたはUPDATEします。

  • 接続を作成する必要はありません。 MySqlDataAdapter(string, string)コンストラクタのオーバーロードを使用すると、接続文字列を渡し、使用する接続を作成します。
  • 同様に、それはSELECTコマンド
  • MySQLCommandBuilderためたDbCommandオブジェクトを作成し、その後SelectCommandなど、更新を作成、削除することがDataAdapterが使用するコマンドをすることを使用しています。これにより、1(1)Updateメソッド呼び出しを発行して1,10または1000行を更新することができます。
  • 1つのテーブルを扱う場合、アプリケーション内に他のSQLは必要ありません。
  • DataAdapterには接続文字列があり、独自の接続を開閉します。変更は、そのような別のユーザーによるようなアプリ外のテーブルに行われた場合、あなたはそれらの新しい行を拾うことができます - あなたはDataTableためPrimaryKeyを定義した場合

、DAは、データを更新することができます。あなたがあなた自身の変更を更新した後:

var rows = myDA.Fill(myDT); 

これは、実際のリフレッシュである - それは唯一の既存の行に新しい行や変更をロードします。元のSQLのWHERE句がまだ適用されていることに注意してください。

ご覧のとおり、DataAdapterはちょうど埋めているだけではありません。DataTables;あなたが求めているものを明確にする必要が

myDt.Load(cmd.ExecuteReader()): 
+0

Ok、私はこのコードをかなり前に投稿していました:)しかし、コマンドビルダーの問題。 'cb.GetxCommand'は'メソッドグループGetxCommandを非委譲型MySqlCommandに変換できませんというエラーを返しています。メソッドを呼び出すつもりでしたか?これは、私が言ったときに私がealerを理解できなかったことでした。それは私が必要と思わないものです... – Mokey

+0

これはメソッドなので、最後に '()'が必要です - ( ) 'はVBでオプションです(私はそのVB答えからの素早い翻訳から始めました)。 – Plutonix

+0

OMG、私はそのような****頭です。完璧に動作します。私はとても愚かです。私はちょうどその質問を信じることができない...私は文字通り、メソッドの最後に '()'が欠落していて、それが何を意味しているのか分かっていた。私の脳はオートパイロットに乗っています...しかし、私はあなたのためにデータグリッドのためにたくさんのことを学んできました:) – Mokey

関連する問題