列表框绑定到数据源SQL Server数据库后为空:C#,Windows窗体

问题描述

每当我将值插入表单文本框并将该信息传递到下一个表单时,应将数据绑定到的列表框为空。我已经明确说明了前一个表单中的哪些输入值应出现在列表框中,但似乎什么也没发生。

我基本上是试图在整个应用中的不同时间将数据存储在同一数据库中。以下是与此问题相关的代码

属性

public class AccountInfo
{
   public string name { get; set; }
   public string surname { get; set; }
   public string email { get ; set; }
   public string password { get; set; }
   public string dateOfBirth { get; set; }
   public string cardType { get; set; }
   public string cardNumber { get; set; }
   public string expiryDate { get; set; }
   public string ccv { get; set; }
   public string duration { get; set; }

   public string FullInfo
   {
      get
      {
         email = Form1.SetValueForText1;
         return $" {name} {surname} ({ email }) ({dateOfBirth}) ({cardType}) ({cardNumber}) ({expiryDate}) ({duration})";
      }
    }
}

函数将值插入数据库

public void InsertNewCardDetails(string card_Type,string card_Number,string expiry_date,string _ccv,string _duration)
{
    using (IDbConnection connection = new System.Data.sqlClient.sqlConnection(@"Data Source=(LocalDB)\MSsqlLocalDB;AttachDbFilename=C:\Users\nauri\source\repos\StylistsApp\Database\UserAccountDatabase.mdf;Integrated Security=True;Connect Timeout=30"))
    {
        List<AccountInfo> accounts = new List<AccountInfo>();
        accounts.Add(new AccountInfo {cardType = card_Type,cardNumber = card_Number,expiryDate = expiry_date,ccv = _ccv,duration = _duration });
        connection.Execute("INSERT INTO[Table] (cardType,cardNumber,expiryDate,ccv,duration) VALUES(@cardType,@cardNumber,@expiryDate,@ccv,@duration)",accounts);
    }
}

将数据绑定到输入字段

namespace StylistsApp
{
    public partial class CardDetails : Form
    {
        public CardDetails()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender,EventArgs e)
        {
            DataAccess db = new DataAccess();
            SetValueForCardType = comboBox1.SelectedItem.ToString(); 
            SetValueForCardNumber = textBox5.Text;
            SetValueForExpiryDate = textBox2.Text;
            SetValueForCCV = textBox3.Text;
            SetValueForDuration = comboBox2.SelectedItem.ToString();
            db.InsertNewCardDetails(comboBox1.SelectedItem.ToString(),textBox5.Text,textBox2.Text,textBox3.Text,comboBox2.SelectedItem.ToString());
            //MessageBox.Show("Account Created Successfully!");

            this.Close();
            Summary summary = new Summary();
            summary.Show();
        }    

        public static string SetValueForCardType = "";
        public static string SetValueForCardNumber = "";
        public static string SetValueForExpiryDate = "";
        public static string SetValueForCCV = "";
        public static string SetValueForDuration = "";
    }
}

尝试将数据从以前的表单绑定到当前表单列表框。如果this.listBox1.DataSource = null;this.listBox1.Items.Clear(); 删除,程序将抛出一个

System.ArgumentException:'设置了DataSource属性后,无法修改项目集合。'

在线

this.listBox1.Items.Add(da.GetValue(0).ToString());

代码

    public partial class Summary : Form
    {
        List<AccountInfo> people = new List<AccountInfo>();
        //private BindingList<string> items = new BindingList<string>();
        public Summary()
        {
            InitializeComponent();
        }

        private void Summary_Load(object sender,EventArgs e)
        {
            sqlConnection sql = new sqlConnection(@"Data Source=(LocalDB)\MSsqlLocalDB;AttachDbFilename=C:\Users\nauri\source\repos\StylistsApp\Database\UserAccountDatabase.mdf;Integrated Security=True;Connect Timeout=30");
            sql.open();
            sqlCommand sqa = new sqlCommand("Select cardType,duration from [Table] where email =@email",sql);
            sqa.Parameters.AddWithValue("@email",Form1.SetValueForText1);        
            sqlDataReader da = sqa.ExecuteReader();
            
            while (da.Read())
            {
                this.listBox1.DataSource = null;
                this.listBox1.Items.Clear(); 
     
                this.listBox1.Items.Add(da.GetValue(0).ToString());
                this.listBox1.Items.Add(da.GetValue(1).ToString());
                this.listBox1.Items.Add(da.GetValue(2).ToString());
                this.listBox1.Items.Add(da.GetValue(3).ToString());
                this.listBox1.Items.Add(da.GetValue(4).ToString());
            }
            sql.Close();
        }
    }

结果显示在此屏幕快照

Outcome

有什么想法吗?帮助将不胜感激!

解决方法

如果您打算在整个应用程序的不同位置将数据存储在同一数据库中,请创建一个单独的数据库。这将使您免于头痛。