Выберите нового пользователя при нажатии «Добавить» - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть следующий метод. Я пытаюсь сделать так, чтобы, когда пользователь нажимал кнопку «Добавить», вновь добавленный пользователь выбирался в имени comboBox.

private void AddUser()
{
    string userQueryString = "SELECT[User_ID], [User_First_Name], [User_Surname] FROM[EquipmentTracker].[dbo].[Users]";
    SqlConnection conn = new SqlConnection(constring);
    SqlCommand commandRecipient = new SqlCommand(userQueryString, conn);
    conn.Open();

    SqlDataReader reader = commandRecipient.ExecuteReader();

    while (reader.Read())
    {
        User addUser = new User();
        addUser.userID = (int)reader["User_ID"];
        addUser.userName = (string)reader["User_First_Name"] + " " + (string)reader["User_Surname"];
        comboRecipient.Items.Add(addUser);
    }
}

Раньше, до того, как я создал метод предотвращения повторного написания кода, я работал следующим образом:

private void btnNewUser_Click(object sender, EventArgs e)
{
    Form2 newUser = new Form2();
    if(newUser.ShowDialog() == DialogResult.OK)
    {
        SqlConnection conn = new SqlConnection(constring);
        conn.Open();
        SqlCommand commandRecipient = new SqlCommand("SELECT [User_ID], [User_First_Name], [User_Surname] FROM [EquipmentTracker].[dbo].[Users]", conn);
        comboRecipient.Items.Clear();

        using (SqlDataReader reader = commandRecipient.ExecuteReader())
        {
            while (reader.Read())
            {
                int recipientID = (int)reader["User_ID"];
                string recipient = (string)reader["User_First_Name"] + " " + (string)reader["User_Surname"];
                comboRecipient.Items.Add(recipientID);
                comboRecipient.Items.Add(recipient);
                Console.WriteLine(String.Format("{0}", reader[0]));
            }
        }
        comboRecipient.SelectedItem = newUser.newUser;
    }
}

Теперь я просто вызываю метод здесь:

private void btnNewUser_Click(object sender, EventArgs e)
{
    Form2 newUser = new Form2();
    if(newUser.ShowDialog() == DialogResult.OK)
    {
        AddUser();
        comboRecipient.SelectedItem = newUser.newUser;
    }
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

Исправление в три раза:

  1. Очистить список элементов комбинированного списка перед его повторным заполнением:

comboRecipient.Items.Clear();

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

  1. Порядок пользователей в вашем запросе, чтобы последний всегда был последним:

SELECT [User_ID], [User_First_Name], [User_Surname] FROM [EquipmentTracker].[dbo].[Users] ORDER BY [User_ID]

Предполагается, что User_ID является автоинкрементным полем. Если у вас есть столбец CreationDate, вы можете использовать его вместо этого.

  1. Выберите последний элемент в выпадающем списке после добавления всех элементов:

Вместо:

comboRecipient.SelectedItem = newUser.newUser;

Использование:

    comboRecipient.SelectedIndex = comboRecipient.Items.Count - 1

Это выберет последний элемент в выпадающем списке, если в выпадающем списке есть элементы. Если элементов нет, то результатом вычисления будет -1, что является действительным индексом для комбинированного списка (даже при использовании привязки данных).

Вы также можете заметить, что ваши элементы в выпадающем списке отображаются некорректно. Вы можете исправить это, установив:

comboRecipient.DisplayMember = "userName";
comboRecipient.ValueMember = "userID";

Это может быть установлено где угодно, но его стоит установить либо в конструкторе, либо в обработчике события Load.

0 голосов
/ 05 ноября 2018

Вам необходимо настроить ComboBox для использования правильных свойств из User объектов, которые вы вводите.

Вот как это сделать программно, например, в событии загрузки формы:

comboRecipient.DisplayMember = "userName";  
comboRecipient.ValueMember = "userID";

Или вы можете установить его в свойствах comboRecipient в конструкторе форм.

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