简体   繁体   English

组合框数据绑定(C#winforms)

[英]combobox data bind (C# winforms)

where is the problem with this code? 此代码在哪里出问题? When i start the program there is no values to choose from comboBox. 当我启动程序时,没有从comboBox中选择的值。 There is no problems with compiling and starting an application. 编译和启动应用程序没有问题。 I have no idea what is wrong here. 我不知道这是怎么了。 Maybe someone have solution for this problem. 也许有人对此问题有解决方案。

Link to pastebin https://pastebin.com/pASVNWq 链接到pastebin https://pastebin.com/pASVNWq

using MySql.Data.MySqlClient;
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;

namespace parKing_new
{
    public partial class editClient : Form
    {
        public editClient()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {}

    //Load customer ID to a combobox
        private void LoadCustomersId()
        {
            var connectionString = 
"Server=localhost;Port=3306;Database=ewisys;Uid=root;password=;";
            using (var connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                var query = "SELECT clientID FROM clients";
                using (var command = new MySqlCommand(query, connection))
                {
                    using (var reader = command.ExecuteReader())
                    {
                        //Iterate through the rows and add it to the 
combobox's items
                        while (reader.Read())
                        {
                        comboBox1.Items.Add(reader.GetString("clientID"));
                        }
                    }
                }
            }
       }

        //Load customer details using the ID
        private void LoadCustomerDetailsById(int id)
        {
            var connectionString = 
"Server=localhost;Port=3306;Database=ewisys;Uid=root;password=;";
            using (var connection = new MySqlConnection(connectionString))
           {
               connection.Open();
               var query = "SELECT clientID, name, surName FROM clients WHERE 
Id = @clientID";
                using (var command = new MySqlCommand(query, connection))
                {
                //Always use SQL parameters to avoid SQL injection and it 
automatically escapes characters
                    command.Parameters.AddWithValue("@clientID", id);
                    using (var reader = command.ExecuteReader())
                    {
                        //No customer found by supplied ID
                        if (!reader.HasRows)
                            return;

                        ClientIDTextBox.Text = 
                    reader.GetInt32("clientID").ToString();
                    nameTextBox.Text = reader.GetString("name");
                    surNameTextBox.Text = reader.GetString("surName");
                    }
                }
           }
       }

      private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var clientID = Convert.ToInt32(comboBox1.Text);
            LoadCustomerDetailsById(clientID);
        }
   }
}

我认为您只定义了LoadCustomersId()方法,但您没有从任何地方调用它。您需要调用该方法

Add this to your code. 将此添加到您的代码。

The reason behind this is that when you launch your application, nothing is calling LoadCustomersId() function to populate the data on your comboBox. 其背后的原因是,当您启动应用程序时,没有任何调用LoadCustomersId()函数来填充comboBox上的数据的事情。 So use the Load event handler and populate your combobox from there: 因此,请使用Load事件处理程序并从此处填充您的组合框:

private void editClient_Load(object sender, EventArgs e)
    {
       LoadCustomersId();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM