C# ComboBox показывает имена и использует идентификаторы в качестве значений? - PullRequest
0 голосов
/ 28 мая 2020

Я отображаю данные из базы данных в ComboBox в C#.

Итак, у меня есть таблица базы данных с идентификатором и его именем.

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

Код, который я использовал сейчас, выглядит следующим образом:

            lblId.Visible = false;
            txtId.Visible = false;

            cbType.Items.Clear();
            con.Open();
            cmd = "SELECT Type_id, Type FROM type";

            SqlDataAdapter da = new SqlDataAdapter(cmd, con);
            DataTable dt = new DataTable();
            da.Fill(dt);

            foreach (DataRow dr in dt.Rows)
            {
                cbType.Items.Add(dr["Type_id"].ToString());
            }

            con.Close();

Здесь я прошу только id, но я нашел что-то вроде этого:

            cbType.DataSource = dt;
            cbType.DisplayMember = "Type";
            cbType.ValueMember = "Type_id";

Это отображает имя.

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

            string klant = txtKlant.Text;
            string kenteken = txtKenteken.Text;
            string type = cbType.SelectedItem.ToString();
            DateTime startdatum = dtpStartdatum.Value;
            DateTime einddatum = dtpEinddatum.Value;

            int result = 0;

            con.Open();

            cmd = "INSERT INTO reserveringen (Klant, Kenteken, Type_id, Startdatum, Einddatum) values(@Klant, @Kenteken, @Type_id, @Startdatum, @Einddatum)";
            command = new SqlCommand(cmd, con);

            command.Parameters.Add(new SqlParameter("@Klant", klant));
            command.Parameters.Add(new SqlParameter("@Kenteken", kenteken));
            command.Parameters.Add(new SqlParameter("@Type_id", type));
            command.Parameters.Add(new SqlParameter("@Startdatum", startdatum));
            command.Parameters.Add(new SqlParameter("@Einddatum", einddatum));

            result = command.ExecuteNonQuery();

            if (result > 0)
            {
                MessageBox.Show("De reservering is toegevoegd.");

                txtKlant.Text = "";
                txtKenteken.Text = "";
                cbType.Items.Clear();
                dtpStartdatum.Value = DateTime.Now;
                dtpEinddatum.Value = DateTime.Now;

                con.Close();

                bekijkReserveringen();
            }
            else
            {
                MessageBox.Show("Er is iets misgegaan, de reservering is niet toegevoegd.");
                con.Close();
            }

Но когда я пытаюсь добавить его в базу данных, я получаю следующую ошибку: result = command.ExecuteNonQuery (); : Ошибка преобразования при преобразовании значения nvarchar 'System.Data.DataRowView' в тип данных int.

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

Если я вставлю его с первым блоком кода, он работает нормально, но для пользователя мне нужно показать имя.

Так кто-нибудь знает, в чем может быть проблема?

Заранее спасибо!

1 Ответ

2 голосов
/ 28 мая 2020

Используйте cbType.SelectedValue вместо SelectedItem, и вы должны правильно получить значение.

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