簡體   English   中英

更新和從DataGridView刪除不起作用

[英]Update and Delete from DataGridView not functioning

我有一個顯示3行的DataGridView ,當我嘗試更新記錄時,它說成功更改了記錄。 但是當我檢查數據庫時,記錄沒有更新。

在刪除按鈕中,它說我必須選擇要刪除的記錄,但是我已經在DataGridView選擇了一行

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 System.Data.Sql;
using System.Data.SqlClient;

namespace RFG_Inventory_and_Management_System
{
    public partial class AdminForm : Form
    {
        SqlCommand cmd;
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Acer\Documents\Visual Studio 2010\Projects\RFG Inventory and Management System\RFG Inventory and Management System\Database1.mdf;Integrated Security=True;User Instance=True");

        SqlCommandBuilder cmdbl;
        SqlDataAdapter adap;

        DataSet ds;
        int ID = 0;

        public AdminForm()
        {
            InitializeComponent();
            PayratesDisplay();
            NonMemberDisplay();
        }

        //Display Data in DataGridView  
        private void PayratesDisplay()
        {
            con.Open();
            DataTable dt = new DataTable();
            adap = new SqlDataAdapter("select * from tbl_payrates", con);
            adap.Fill(dt);
            dataGridView4.DataSource = dt;
            con.Close();
        }
        private void NonMemberDisplay()
        {
            con.Open();
            DataTable dt = new DataTable();
            adap = new SqlDataAdapter("SELECT tbl_nonMember.*, tbl_customer.lname, tbl_customer.fname, tbl_customer.mname, tbl_customer.gender, tbl_customer.age, tbl_customer.membership_type FROM    tbl_nonMember INNER JOIN tbl_customer ON tbl_nonMember.customerID = tbl_customer.customerID", con);
            adap.Fill(dt);
            dataGridView2.DataSource = dt;
            con.Close();
        }

        //Clear Data  
        private void ClearData()
        {
            tbMemship.Text = "";
            tbPerses.Text = "";
            tbDisc.Text = "";
            ID = 0;
        }  

        private void AdminForm_Load(object sender, EventArgs e)
        {

            // TODO: This line of code loads data into the 'database1DataSet.tbl_customer' table. You can move, or remove it, as needed.
            this.tbl_customerTableAdapter.Fill(this.database1DataSet.tbl_customer);
            // TODO: This line of code loads data into the 'database1DataSet.tbl_nonMember' table. You can move, or remove it, as needed.
            this.tbl_nonMemberTableAdapter.Fill(this.database1DataSet.tbl_nonMember);

        }

        private void fillByToolStripButton_Click(object sender, EventArgs e)
        {
            try
            {
                this.tbl_customerTableAdapter.FillBy(this.database1DataSet.tbl_customer);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }
        //----------------------------------BUTTONS FOR PAY RATE-------------------------------------------------------------//

        //dataGridView1 RowHeaderMouseClick Event  
        private void dataGridView4_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            tbMemship.Text = dataGridView4.Rows[e.RowIndex].Cells[0].Value.ToString();
            tbPerses.Text = dataGridView4.Rows[e.RowIndex].Cells[1].Value.ToString();
            tbDisc.Text = dataGridView4.Rows[e.RowIndex].Cells[2].Value.ToString();
        }  

        private void btn_update_Click(object sender, EventArgs e)
        {
            if (tbMemship.Text != "" && tbPerses.Text != "" && tbDisc.Text != "")
            {
                cmd = new SqlCommand("update tbl_payrates set Membership=@Membership,PerSession=@PerSession where Discounted=@Discounted", con);
                con.Open();
                cmd.Parameters.AddWithValue("@Membership", tbMemship.Text);
                cmd.Parameters.AddWithValue("@PerSession", tbPerses.Text);
                cmd.Parameters.AddWithValue("@Discounted", tbDisc.Text);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Record Updated Successfully");
                con.Close();
                PayratesDisplay();
                ClearData();
            }
            else
            {
                MessageBox.Show("Please Select Record to Update");
            } 
        }

        private void btn_PRadd_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Are you sure to save Changes", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (dr == DialogResult.Yes)
            {
                con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Acer\Documents\Visual Studio 2010\Projects\RFG Inventory and Management System\RFG Inventory and Management System\Database1.mdf;Integrated Security=True;User Instance=True");
                con.Open();
                cmd = new SqlCommand("INSERT INTO tbl_payrates (Membership, PerSession, Discounted) VALUES (@Membership, @PerSession, @Discounted)", con);
                cmd.Parameters.AddWithValue("@Membership", tbMemship.Text);
                cmd.Parameters.AddWithValue("@PerSession", tbPerses.Text);
                cmd.Parameters.AddWithValue("@Discounted", tbDisc.Text);
                cmd.ExecuteNonQuery();
            }   
        }

        private void btn_PRdel_Click_1(object sender, EventArgs e)
        {
            //Update button update dataset after insertion,upadtion or deletion
            DialogResult dr = MessageBox.Show("Are you sure to save Changes", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

            if (dr == DialogResult.Yes)
            {
                if (ID != 0)
                {
                    cmd = new SqlCommand("DELETE FROM tbl_payrates WHERE ID=@id", con);
                    con.Open();
                    cmd.Parameters.AddWithValue("@id", ID);
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("Record Deleted Successfully!");
                    PayratesDisplay();
                    ClearData();
                }

                else
                {
                    MessageBox.Show("Please Select Record to Delete");
                }
            }
        }
    }
}

整個AttachDbFileName =方法有缺陷-充其量! 在Visual Studio中運行應用程序時,它將在.mdf文件周圍復制(從App_Data目錄復制到輸出目錄-通常是.\\bin\\debug應用程序運行所在的位置),並且很可能 INSERT可以正常工作-但最后您只是看錯了.mdf文件

如果您要堅持這種方法,請嘗試在myConnection.Close()調用上放置一個斷點,然后使用SQL Server Mgmt Studio Express檢查.mdf文件-我幾乎可以確定您的數據在那里。

我認為真正的解決方案

  1. 安裝SQL Server Express(並且您已經完成了此操作)

  2. 安裝SQL Server Management Studio Express

  3. SSMS Express中創建數據庫,並為其指定一個邏輯名稱(例如InventoryDb

  4. 使用其邏輯數據庫名稱 (在服務器上創建時提供)連接到該數據庫 -並且不要弄亂物理數據庫文件和用戶實例。 在這種情況下,您的連接字符串將類似於:

     Data Source=.\\\\SQLEXPRESS;Database=InventoryDb;Integrated Security=True 

    和其他一切是完全一樣的前...

另請參閱亞倫·貝特朗(Aaron Bertrand)出色的博客文章不良習慣:使用AttachDbFileName獲取更多背景信息。

我認為您沒有將值賦給id .so id始終為0,因此您無法刪除記錄。 嘗試將值分配給ID並刪除。我希望它可以正常工作。

private void btn_PRdel_Click_1(object sender, EventArgs e)
    {
        //Update button update dataset after insertion,upadtion or deletion
        DialogResult dr = MessageBox.Show("Are you sure to save Changes", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

        if (dr == DialogResult.Yes)
        {
            if (ID != 0)// where is the id value?
            {
                cmd = new SqlCommand("DELETE FROM tbl_payrates WHERE ID=@id", con);
                con.Open();
                cmd.Parameters.AddWithValue("@id", ID);
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Record Deleted Successfully!");
                PayratesDisplay();
                ClearData();
            }

            else
            {
                MessageBox.Show("Please Select Record to Delete");
            }
        }
    }

暫無
暫無

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

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