簡體   English   中英

Datagridview單元格值更改更新數據庫

[英]Datagridview cell value change update database

我已經將Mysql數據庫中的數據檢索到DataGridView1中。 讓我們假設我在第0行中。當我更改第0行,單元格1的內容並按Enter鍵或按鈕時,Update查詢應該修改該行,但是我無法修改該單元格的值。 當我重新加載數據且數據庫未修改時,該單元格保持其先前的值。 例如,如果我將Client_Name列下單元格的內容從“ Acs”更改為“ Gmt”,如何將單元格的值從“ Acs”更改為“ Gmt”? 並將其更新到Mysql數據庫中,我在Vs 2012中使用c#。以下是將我的數據庫檢索到datagridview1中的代碼,歡迎任何幫助,謝謝。

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

namespace PI.Gen
{
    public partial class frmMain : Form
    {
        MySqlConnection Conn;


        public frmMain()
        {
            InitializeComponent();
            btnDisconnect.Enabled = true;
            btnLoadData.Enabled = false;
            btnLoadClients.Enabled = false;

        }





        private void btnConnect_Click(object sender, EventArgs e)
        {

            string strConnect = "server=" + txtServer.Text + ";uid=" + txtUsername.Text + ";pwd=" + txtPassword.Text + ";database=" + txtDatabase.Text;
            try
            {
                if (txtServer.TextLength <= 0 || txtUsername.TextLength <= 0 || txtDatabase.TextLength <= 0)
                {
                    MessageBox.Show("You have an empty database connection field. Please supply a valid value.");
                    return;
                }

                Conn = new MySqlConnection(strConnect);
                Conn.Open();

                if (Conn.State.ToString() != "Open")
                {
                    MessageBox.Show("Could not open database connection");
                    return;
                }
                btnDisconnect.Enabled = true;
                btnConnect.Enabled = false;
                btnLoadData.Enabled = true;
                btnLoadClients.Enabled = true;
                //  btnSubmitClient.Enabled = true;
            }
            catch (Exception ex)  // catch on general exceptions, not specific
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }



        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (Conn != null)
            {
                Conn.Close();
            }
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            try
            {
                Conn.Close();
                Conn = null;
                btnDisconnect.Enabled = false;
                btnConnect.Enabled = true;
                btnLoadData.Enabled = false;
                btnLoadClients.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }





        private void btnLoadData_Click(object sender, EventArgs e)
        {
            try
            {
                string CmdString = "SELECT * FROM t_receipients";
                MySqlDataAdapter sda = new MySqlDataAdapter(CmdString, Conn);
                DataSet ds = new DataSet();

                sda.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0].DefaultView;


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

         }


        private void btnLoadClients_Click(object sender, EventArgs e)
        {
            try
            {

                string CmdString = "SELECT * FROM t_clients";
                MySqlDataAdapter sda = new MySqlDataAdapter(CmdString, Conn);

                DataSet ds = new DataSet();
                sda.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0].DefaultView;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

        }

經過一系列的試驗和錯誤,我終於找到了我想要的東西,因此能夠從下面的datagridview更新數據庫是我的代碼,可以100%希望它對將來的人有所幫助,並感謝@RageComplex的幫助,但是還有沒有一件事,有人知道如何實現我的意思嗎,而不是按Enter鍵在datagridview中進行更改,而是單擊ty

   private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        try
        {
            DataTable changes = ((DataTable)dataGridView1.DataSource).GetChanges();
            if (changes != null)
            {
                MySqlCommandBuilder mcb = new MySqlCommandBuilder(mySqlDataAdapter);
                mySqlDataAdapter.UpdateCommand = mcb.GetUpdateCommand();
                mySqlDataAdapter.Update(changes);
                ((DataTable)dataGridView1.DataSource).AcceptChanges();

                MessageBox.Show("Cell Updated");
                return;
            }


        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


    }

您不更新對數據庫的更改。 在您保持連接打開的同時,並不意味着這將自動更新您的數據。

首先,不要保持連接打開。 在您的應用程序中,您有一個connect按鈕,該按鈕非常適合測試,但不適用於真正保持連接打開,我認為不適合使用數據庫。

加載數據的方式是正確的。

您給datagridview一個數據源,它是數據集中的一個表。 因此,在datagridview中所做的更改將保存到您的DataSet中,而不保存到您的數據庫中。

這是您更新數據庫的方式

   public void UpdateTable(DataSet ds)
    {
        using (MySqlConnection connect = new MySqlConnection(ConnString))
        {
            connect.Open();
            MySqlDataAdapter adapt = new MySqlDataAdapter();
            MySqlCommandBuilder commbuilder = new MySqlCommandBuilder(adapt);
            adapt.SelectCommand = new MySqlCommand("SELECT * FROM t_receipients", connect);
            adapt.Update(ds.Tables[0]); 
        }
    }

確保在更新數據庫之前,使用datagridview1.EndEdit()

另外, using ,這將確保在完成該代碼后再次關閉連接,最好是始終將其保留在try-except中。

您似乎很難連接數據庫,因為它似乎值得贊揚。 我也忘記了在上面包含MySqlDataAdapter,在這種情況下我全局使用了適配器。 我不想將這個問題重復報告,但是現在看起來確實像這個答案。

我想提供在應用程序中測試過的代碼。我將其用於按鈕單擊事件。

private void button3_Click(object sender, EventArgs e)
    {
        string StrQuery;
        try
        {
            string MyConnection2 = "server=localhost;user id=root;password=;database=k";
            using (MySqlConnection conn = new MySqlConnection(MyConnection2))
            {
                using (MySqlCommand comm = new MySqlCommand())
                {
                    comm.Connection = conn;
                    conn.Open();
                    for (int i = 0; i < dataGridView3.Rows.Count; i++)
                    {
                        StrQuery = @"update s set  Quantity='" + dataGridView3.Rows[i].Cells["Quantity"].Value.ToString() + "' where No='" + dataGridView3.Rows[i].Cells["Item No"].Value.ToString() + "';";

                        comm.CommandText = StrQuery;
                        comm.ExecuteNonQuery();
                    }
                }
            }
        }
        catch
        { 
        }
    }

我認為這可能對您有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM