【问题标题】:How to delete selected items in listView by id(primary key) winforms如何通过id(主键)winforms删除listView中的选定项目
【发布时间】:2020-05-21 11:54:19
【问题描述】:

所以我正在制作一个程序,我可以在其中将用户添加到数据库,然后将它们显示在屏幕底部。 现在我也试图从数据库中删除某些项目,但我需要 id(这是主键),因为所有其他字段都可以重复,它会删除该字段 id 重复的所有项目(这是允许的)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient; //sql server local db

namespace KermisInschrijven
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            bool isChecked = radioButton1.Checked;
            string day = "";
            if (isChecked)
            {
                day = radioButton1.Text;
                load_list_zat();
            } else
            {
                day = radioButton2.Text;
                load_list_zon();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                add_entry_zat();
            } else if ( !radioButton1.Checked){
                add_entry_zon();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem item in listView1.Items)
            {
                System.Console.WriteLine(item.Selected);
                if (item.Selected)
                {
                    System.Console.WriteLine("deleting");
                    item.Remove();
                    string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";
                    SqlConnection cn_connection = new SqlConnection(cn_string);

                    string sql_Text = "DELETE FROM tbl_zaterdag WHERE id=@num";
                    SqlCommand cmd = new SqlCommand(sql_Text, cn_connection);
                    cmd.Parameters.AddWithValue("@num", <Insert_id_here>);
                    cn_connection.Open();
                    SqlDataReader r = cmd.ExecuteReader();
                    while (r.Read())
                    {

                    }
                    cn_connection.Close();

                    load_list_zat();
                }
            }
        }

        private void make_empty()
        {
            for (int i = listView1.Items.Count - 1; i >= 0; i--)
            {
                    listView1.Items[i].Remove();
            }
        }

        private void add_entry_zat()
        {
            string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";
            SqlConnection cn_connection = new SqlConnection(cn_string);

            string first_name = firstname.Text;
            string last_name = lastname.Text;

            decimal mg = mosg.Value;
            decimal mk = mosk.Value;
            decimal mgh = mosgh.Value;
            decimal mkh = moskh.Value;
            decimal pg = pag.Value;
            decimal pk = pak.Value;
            decimal pgh = pagh.Value;
            decimal pkh = pakh.Value;

            bool payed = checkBox1.Checked;

            string sql_Text = "INSERT INTO tbl_zaterdag (voornaam, achternaam, mg, mk, mgh, mkh, pg, pk, pgh, pkh, betaald) VALUES(@first, @last, @mg, @mk, @mgh, @mkh, @pg, @pk, @pgh, @pkh, @payed)";
            SqlCommand cmd = new SqlCommand(sql_Text, cn_connection);

            cmd.Parameters.AddWithValue("@first", first_name);
            cmd.Parameters.AddWithValue("@last", last_name);
            cmd.Parameters.AddWithValue("@mg", mg);
            cmd.Parameters.AddWithValue("@mk", mk);
            cmd.Parameters.AddWithValue("@mgh", mgh);
            cmd.Parameters.AddWithValue("@mkh", mkh);
            cmd.Parameters.AddWithValue("@pg", pg);
            cmd.Parameters.AddWithValue("@pk", pk);
            cmd.Parameters.AddWithValue("@pgh", pgh);
            cmd.Parameters.AddWithValue("@pkh", pkh);
            cmd.Parameters.AddWithValue("@payed", payed);

            try
            {
                cn_connection.Open();
                SqlDataReader r = cmd.ExecuteReader();
                while (r.Read())
                {

                }
                cn_connection.Close();
            } catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }

            load_list_zat();
        }

        private void add_entry_zon()
        {
            string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";
            SqlConnection cn_connection = new SqlConnection(cn_string);

            string first_name = firstname.Text;
            string last_name = lastname.Text;

            decimal mg = mosg.Value;
            decimal mk = mosk.Value;
            decimal mgh = mosgh.Value;
            decimal mkh = moskh.Value;
            decimal pg = pag.Value;
            decimal pk = pak.Value;
            decimal pgh = pagh.Value;
            decimal pkh = pakh.Value;

            bool payed = checkBox1.Checked;

            string sql_Text = "INSERT INTO tbl_zondag (voornaam, achternaam, mg, mk, mgh, mkh, pg, pk, pgh, pkh, betaald) VALUES(@first, @last, @mg, @mk, @mgh, @mkh, @pg, @pk, @pgh, @pkh, @payed)";
            SqlCommand cmd = new SqlCommand(sql_Text, cn_connection);

            cmd.Parameters.AddWithValue("@first", first_name);
            cmd.Parameters.AddWithValue("@last", last_name);
            cmd.Parameters.AddWithValue("@mg", mg);
            cmd.Parameters.AddWithValue("@mk", mk);
            cmd.Parameters.AddWithValue("@mgh", mgh);
            cmd.Parameters.AddWithValue("@mkh", mkh);
            cmd.Parameters.AddWithValue("@pg", pg);
            cmd.Parameters.AddWithValue("@pk", pk);
            cmd.Parameters.AddWithValue("@pgh", pgh);
            cmd.Parameters.AddWithValue("@pkh", pkh);
            cmd.Parameters.AddWithValue("@payed", payed);

            try
            {
                cn_connection.Open();
                SqlDataReader r = cmd.ExecuteReader();
                while (r.Read())
                {

                }
                cn_connection.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

            load_list_zon();
        }
        private void load_list_zat()
        {
            make_empty();
            //connection string
            string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";

            //connection
            SqlConnection con = new SqlConnection(cn_string);

            //get data
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tbl_zaterdag", con);
            DataTable dt = new DataTable();
            da.Fill(dt);

            //loop through items in dt
            foreach (DataRow row in dt.Rows)
            {
                if (dt.Rows.IndexOf(row) != 0)
                {

                    ListViewItem item = new ListViewItem(row["id"].ToString());
                    item.SubItems.Add(row["voornaam"].ToString());
                    item.SubItems.Add(row["achternaam"].ToString());
                    item.SubItems.Add(row["mg"].ToString());
                    item.SubItems.Add(row["mk"].ToString());
                    item.SubItems.Add(row["mgh"].ToString());
                    item.SubItems.Add(row["mkh"].ToString());
                    item.SubItems.Add(row["pg"].ToString());
                    item.SubItems.Add(row["pk"].ToString());
                    item.SubItems.Add(row["pgh"].ToString());
                    item.SubItems.Add(row["pkh"].ToString());
                    double price = calc_price(row["mg"], row["mk"], row["mgh"], row["mkh"], row["pg"], row["pk"], row["pgh"], row["pkh"]);
                    item.SubItems.Add(price.ToString());
                    item.SubItems.Add(row["betaald"].ToString());

                    listView1.Items.Add(item);
                }
            }
        }

        private void load_list_zon()
        {
            make_empty();  //connection string
            string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";

            //connection
            SqlConnection con = new SqlConnection(cn_string);

            //get data
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tbl_zondag", con);
            DataTable dt = new DataTable();
            da.Fill(dt);

            //loop through items in dt
            foreach (DataRow row in dt.Rows)
            {

                ListViewItem item = new ListViewItem(row["id"].ToString());
                item.SubItems.Add(row["voornaam"].ToString());
                item.SubItems.Add(row["achternaam"].ToString());
                item.SubItems.Add(row["mg"].ToString());
                item.SubItems.Add(row["mk"].ToString());
                item.SubItems.Add(row["mgh"].ToString());
                item.SubItems.Add(row["mkh"].ToString());
                item.SubItems.Add(row["pg"].ToString());
                item.SubItems.Add(row["pk"].ToString());
                item.SubItems.Add(row["pgh"].ToString());
                item.SubItems.Add(row["pkh"].ToString());
                double price = calc_price(row["mg"], row["mk"], row["mgh"], row["mkh"], row["pg"], row["pk"], row["pgh"], row["pkh"]);
                item.SubItems.Add(price.ToString());
                item.SubItems.Add(row["betaald"].ToString());

                listView1.Items.Add(item);
            }
        }

        private double calc_price(object mg, object mk, object mgh, object mkh, object pg, object pk, object pgh, object pkh)
        {
            string mg_str = mg.ToString();
            string mk_str = mk.ToString();
            string mgh_str = mgh.ToString();
            string mkh_str = mkh.ToString();
            string pg_str = pg.ToString();
            string pk_str = pk.ToString();
            string pgh_str = pgh.ToString();
            string pkh_str = pkh.ToString();

            double mg_int = Convert.ToDouble(mg_str);
            double mk_int = Convert.ToDouble(mk_str);
            double mgh_int = Convert.ToDouble(mgh_str);
            double mkh_int = Convert.ToDouble(mkh_str);
            double pg_int = Convert.ToDouble(pg_str);
            double pk_int = Convert.ToDouble(pk_str);
            double pgh_int = Convert.ToDouble(pgh_str);
            double pkh_int = Convert.ToDouble(pkh_str);

            double result = mg_int * 20 + mk_int * 15 + mgh_int * 10 + mkh_int * 7.5 + pg_int * 12 + pk_int * 8 + pgh_int * 6 + pkh_int * 4;
            return result;

        }
    }
}

我的表格如下所示(如果您想知道,它是荷兰语):

我无法找到如何获取所选项目的 ID, 在我的代码中,我想用项目的 id 替换。

【问题讨论】:

    标签: c# sql database winforms


    【解决方案1】:

    找到了: 只需要做 item.Text 因为那是所选项目的名称....

    foreach (ListViewItem item in listView1.Items)
                {
                    System.Console.WriteLine(item.Selected);
                    if (item.Selected)
                    {
                        System.Console.WriteLine("deleting");
                        item.Remove();
                        string cn_string = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\Admin\\Code\\C#\\Projects\\KermisInschrijven\\dbInschrijvingen.mdf;Integrated Security=True";
                        SqlConnection cn_connection = new SqlConnection(cn_string);
    
                        string sql_Text = "DELETE FROM tbl_zaterdag WHERE id=@num";
                        SqlCommand cmd = new SqlCommand(sql_Text, cn_connection);
                        cmd.Parameters.AddWithValue("@num", item.Text);
                        cn_connection.Open();
                        SqlDataReader r = cmd.ExecuteReader();
                        while (r.Read())
                        {
    
                        }
                        cn_connection.Close();
    
                        load_list_zat();
                    }
                }
    

    【讨论】:

      【解决方案2】:

      当您创建 ListViewItem 时,您会在那里传递id(然后用作Text 属性)。

      ListViewItem item = new ListViewItem(row["id"].ToString());
      

      您可以通过 ListView 的 SelectedItems 属性访问它:

      var id = "";
      if (listView1.SelectedItems.Count > 0)
          id = listView1.SelectedItems[0].Text;
      

      【讨论】:

      • 是的,这会起作用,但它只会删除 1 个项目。使用我的解决方案,您可以选择多个项目并删除它们
      • 当然,但是您可以遍历 SelectedItems:foreach (ListViewItem selectedItem in listView1.SelectedItems)
      • 迭代 SelectedItems 也更快(当 SelectedItems.Count
      • 好的,但我在这里的目标不是速度xD,它是我的第一个winforms项目,所以是的......
      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多