Как добавить элемент из списка в текстовое поле - PullRequest
0 голосов
/ 16 июня 2020

Я использую Windows Forms из Visual Studio. Кодирование с помощью C#

Мне нужна помощь с добавлением элементов списка в текстовые поля. Код выглядит следующим образом:

// * Когда нажимается кнопка, в списке отображаются сведения о каждом покупателе. В каждой строке указаны имя, фамилия, телефон и адрес электронной почты клиента. Детали клиента берутся из базы данных.

    string customerFirstname = "";
    string customerLastname = "";
    string customerPhone = "";
    string customerEmail = "";

private void buttonSearch_Click(object sender, EventArgs e)
    {



        SQL.selectQuery("SELECT * FROM Customer");






        if (SQL.read.HasRows)
        {
            //this goes through each table row in the database
            while (SQL.read.Read())
            {
                //the values are obtained from the database and assigned to the variables.


                customerFirstname = SQL.read[0].ToString();
                customerLastname = SQL.read[1].ToString();
                customerPhone = SQL.read[2].ToString();
                customerEmail = SQL.read[3].ToString();



                //Each row is displayed in the listbox
                listBoxCustomers.Items.Add(
                customerFirstname 
                + customerLastname  + customerPhone +  customerEmail);




            }


        }
    }

Когда строка была выбрана, я хотел бы нажать кнопку и отобразить данные этого конкретного клиента в текстовых полях.

Это код, который у меня есть использовано:

private void buttonSelectCustomerFromSearch_Click(object sender, EventArgs e) {
        textboxCustomerFirstName.Text = customerFirstname;
        textboxCustomerLastname.Text = customerLastname;
        textboxCustomerPhone.Text = customerPhone;
        textboxCustomerEmail.Text = customerEmail;  }

У меня проблемы с добавлением значений из выбранного элемента списка в текстовое поле. Когда я запускаю это, текстовое поле показывает детали последнего клиента в базе данных и игнорирует любые выбранные строки. Не могли бы вы помочь? Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Думаю, это простая демонстрация для начала с

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

        private readonly List<Customer> customers = GetCustomers();

        private static List<Customer> GetCustomers()
    {
        var customers = new List<Customer>();

        using (var con = new SqlConnection(connectionString))
        {
            string sql = "SELECT Id, FirstName, LastName, Email, Phone FROM Customers";
            using (var cmd = new SqlCommand(sql, con))
            {
                cmd.CommandType = CommandType.Text;
                try
                {
                    con.Open();
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var customer = new Customer
                            {
                                Id = Convert.ToInt32(reader["Id"]),
                                FirstName = reader["FirstName"].ToString(),
                                LastName = reader["FirstName"].ToString(),
                                Email = reader["Email"].ToString(),
                                Phone = Convert.ToInt32(reader["Phone"]),

                            };

                            customers.Add(customer);
                        }
                    }
                }
                catch (SqlException e)
                {
                    MessageBox.Show(e.Message);
                }
            }


        }
        return customers;
    }    
        private void Form1_Load(object sender, EventArgs e)
        {
            listBox1.DataSource = customers;
            listBox1.DisplayMember = "FirstName";
            listBox1.ValueMember = "Id";
        }



        private void button1_Click(object sender, EventArgs e)
        {
            int Id = (int)listBox1.SelectedValue;

            Customer customerSelected = customers.Find(el => el.Id == Id);
            textBox1.Text = customerSelected.ToString();
        }

    }

    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Phone { get; set; }
        public string Email { get; set; }
        public int Id { get; set; }



public override string ToString()
    {
        return $"Id: {Id},FirstName: {FirstName},LastName: { LastName},Phone: {Phone},Email: {Email}";
    }
}
0 голосов
/ 16 июня 2020

В обработчике кликов вы используете «customerFirtName», «customerLastname» и т. Д. c .. Это переменные, которые вы использовали для чтения данных из базы данных. Вот почему ваше текстовое поле показывает данные от последнего клиента из вашей базы данных - он был последним, переданным с использованием этих переменных, и эти переменные все еще хранят свои данные.

вам нужны данные из списков "Выбранный элемент "вместо этого. вы можете либо проанализировать данные из этих текстов элементов, либо создать объект «человек» и сохранить его в «теге» списков. Итак, при нажатии кнопки вы можете преобразовать listbox.SelectedItem.Tag в тип человека и использовать его для заполнения текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...