Сделать индекс combox выровнять в столбце SQL базе данных (c#)
private void combopop() { using (connection = new SqlConnection(connectionString)) using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM BiludstyrTABEL", connection)) { DataTable dt3 = new DataTable(); adapter.Fill(dt3); OScomboBox.DataSource = dt3; OScomboBox.ValueMember = "StregkodeID"; OScomboBox.DisplayMember = "Name"; OScomboBox.SelectedIndex = -1; } } private void OScomboBox_Click(object sender, EventArgs e) { combopop(); } private void OScomboBox_SelectedIndexChanged(object sender, EventArgs e) { OSfyld1(); } private void OSfyld1() { using (connection = new SqlConnection(connectionString)) using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM BiludstyrTABEL WHERE StregkodeID = '" + OScomboBox.SelectedIndex + "'", connection)) { DataTable dt4 = new DataTable(); adapter.Fill(dt4); foreach (DataRow dr in dt4.Rows) { OSnavntextBox.Text = dr["Navn"].ToString(); OSproducenttextBox.Text = dr["Producent"].ToString(); OSkategoritextBox.Text = dr["Kategori"].ToString(); OSprismmomstextBox.Text = dr["Pris m. Moms"].ToString(); OSantaltextBox.Text = dr["Antal"].ToString(); } } }
Что я уже пробовал:
Когда я нажимаю стрелку выпадающего списка combobox, она отображает valuemembers (StregkodeID) в выпадающем списке combobox. Оскомбобокс.SelectedIndex =-1; заставляет все идентификаторы появляться в выпадающем списке, если я не написал эту строку, то первый идентификатор (номер 1 - самоидентификатор базы данных) появится в выпадающем списке при нажатии на стрелку раскрывающегося списка.
Моя проблема: когда вы нажимаете ID 2 (Вторая строка в списке ID - конечно), он отображает первую запись в базе данных (он отображает запись первой записи базы данных) !!
Индекс shiftet при заполнении combobox правильно? Таким образом, первая запись из базы данных устанавливается в индекс 0 выпадающего списка? Когда я нажимаю на идентификатор 1, ничего не появляется (мои текстовые поля пусты). Поэтому каждый раз, когда я выбираю идентификатор в выпадающем списке, он отображает данные предыдущего индекса (pick 2 get 1, pick 5 get 4 и так далее).
Я работаю над этим уже несколько дней и, похоже, не могу найти никаких ответов. ПОЖАЛУЙСТА, ПОМОГИТЕ!
CHill60
Вы ответили на свой собственный вопрос - список полей со списком начинается с 0, а не с 1. Но вы должны использовать OSComboBox.ВыбранныйЦенность не показатель
Richard Deeming
НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM BiludstyrTABEL WHERE StregkodeID = @StregkodeID", connection)) { adapter.SelectCommand.Parameters.AddWithValue("@StregkodeID", OScomboBox.SelectedValue); ...