0

C#Windows フォームには 2 つのボタンがあります。クエリと更新。そのフォームにはdatagridview、MySQL の結果を入れる場所があります。別に、[クエリ] をクリックすると、結果が正しく取得されます。の値を変更してdatagrid[更新] をクリックすると、MySQL はそれらの更新を受信します。ただし、MySQL テーブルから最新の変更を取得するために [クエリ] をクリックすると、datagridview空白になります。最終的にフォームを表示するには、フォームを閉じて [クエリ] を再度クリックする必要があります。

これは、da.update() を正しく呼び出していないか、Query ボタンで何かを間違って参照している機能ですか?

winform のコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.Odbc;
using System.Data.SqlClient;

namespace GridAdjustments
{
    public partial class Form3 : Form
    {
        private MySqlDataAdapter da;        // Data Adapter
        private DataSet ds;                 // Dataset
        private string sTable = "Portfolio";  // Table Name

        public Form3()
        {
            InitializeComponent();
        }


        private void Query_Click(object sender, EventArgs e)
        {
            string connectionString = "SERVER=localhost;" +
                                      "UID=xxxxxx;" +
                                      "PASSWORD=xxxxx;" +
                                      "DATABASE=test";

            MySqlConnection conn = null;

            try
            {    
                conn = new MySqlConnection(connectionString);

                conn.Open();
                da = new MySqlDataAdapter("SELECT * FROM books;", conn);
                ds = new DataSet();
                da.Fill(ds, sTable);
                conn.Close(); 
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                conn.Close();
            }
            finally
            {
                dataGridView1.Refresh();

                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = sTable;

            }  
        }


        private void Update_Click(object sender, EventArgs e)
        {
            MySqlCommandBuilder cmb = new MySqlCommandBuilder(da);

            da.Update(ds, sTable);
        }
    }
}
4

4 に答える 4

0

コードを変更してみて、それが機能するかどうかを確認してください。

private void Query_Click(object sender, EventArgs e)
{
    try
    {    
        MySqlConnection conn = new MySqlConnection(connectionString);
        conn.Open();
        da = new MySqlDataAdapter("SELECT * FROM books;", conn);
        ds = new DataSet();
        da.Fill(ds, sTable);
        conn.Close(); 
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        MessageBox.Show(ex.Message);            
    }
    finally
    {
        dataGridView1.Refresh();

        dataGridView1.DataSource = ds;
        dataGridView1.DataMember = sTable;

        if (conn.State == System.Data.ConnectionState.Open)
            conn.Close();
    }  
}

private void Update_Click(object sender, EventArgs e)
{
    try
    { 
        MySqlConnection conn = new MySqlConnection(connectionString);
        conn.Open();

        MySqlCommandBuilder cmb = new MySqlCommandBuilder(da);
        cmb.Connection = conn;
        da.Update(ds, sTable);
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        MessageBox.Show(ex.Message);            
    }
    finally
    {           
        if (conn.State == System.Data.ConnectionState.Open)
            conn.Close();
    }  
}
于 2012-10-05T02:19:33.440 に答える
0

これを試してください。データソースを再バインドして、更新後に DG を更新します。

   private void Update_Click(object sender, EventArgs e)
    {
        MySqlCommandBuilder cmb = new MySqlCommandBuilder(da);

        da.Update(ds, sTable);

        dataGridView1.DataSource = ds;      

    }
于 2016-08-06T18:11:22.210 に答える