checkListBox selectedindex и sql mapping

У меня есть окно со списком и checkListbox в моем приложении для форм Windows. В моем поле со списком я сопоставил свои элементы в моей таблице sql, используя этот запрос, и отобразил его в своем поле со списком

select * from job_table 

Таблица SQL

job_detail

  -------------------- jobId | jobName ------------------- 1 | McDonald 2 | Buger King 3 | Security Officer 4 | IT Manager 5 | Teacher 

код:

  string query = "select jobId, jobName from job_detail"; SqlDataAdapter da = new SqlDataAdapter(); myConn.Open(); DataTable dt = new DataTable(); SqlCommand command = new SqlCommand(query, myConn); SqlDataReader reader = command.ExecuteReader(); dt.Load(reader); DataRow dr; dr= dt.NewRow(); dr.ItemArray = new object[] { 0, "<----------Select a job -------> " }; dt.Rows.InsertAt(dr, 0); applicationComboBox.DataSource = dt; applicationComboBox.ValueMember = "jobId"; applicationComboBox.DisplayMember = "jobName"; 

После привязки comboBox я вызываю вызов метода fill_workerCheckList, чтобы отобразить список работников, которые в данный момент находятся на этом задании.

  ----------------------------- workerId | workerName | ----------------------------- 1 | Amy | 2 | Jim | 3 | Peter | 4 | Pam | 5 | David | 6 | Sara | 7 | Laura | 8 | Bob | 

Я присоединился к двум таблицам, чтобы получить их отношения: 1-N: 1 рабочий может иметь много работы, используя этот запрос соединения:

 select * from worker_detail as wd LEFT JOIN job_detail as jd ON wd.jobId = jd.jobId ----------------------------------------- workerId | workerName | jobId ------------------------------------------ 1 | Amy | 1 2 | Jim | 1 3 | Peter | 2 4 | Pam | 5 5 | David | 3 6 | Sara | 2 7 | Laura | 4 8 | Bob | 4 

Чтобы отобразить имя workerName в checkListBox, я думал фильтровать comboBox.selectedIndex, но это не очень хорошая идея, потому что то, что произойдет, если 1 работа была сокращена, чем вся запись будет испорчена

Это запрос, который я думал об использовании SQL-инъекции

 select * from worker_detail as wd LEFT JOIN job_detail as jd ON wd.jobId = jd.jobId where wd.jobId = '"+comboBox.SelectedIndex+"' 

Мой исходный код:

  SqlCommand myCommand = new SqlCommand(query, myConn); SqlDataReader dr = myCommand.ExecuteReader(); comboBox.Items.Clear(); string s = "Select All"; comboBox.Items.Add(s); while (dr.Read()) { string workerName = dr.IsDBNull(1) ? string.Empty : dr.GetString(1); checkListBox.Items.Add(name); } 

Вы можете сразу увидеть проблему здесь. Что делать, если работа как-то срезается? то jobId исчезнет, ​​и индекс comboBox не будет работать. То, что я хочу знать, – это лучший способ сопоставления workId вместо индекса?

Чтобы понять поток таблицы, вы можете проверить этот SQLFiddle . Это поможет вам понять таблицу первичных и транзакций.

И ваша главная проблема заключается в том, что вы не понимаете различия между SelectedValue свойствами SelectedIndex и SelectedValue вашего элемента управления. Здесь вы можете прочитать всю разницу, но для справки я могу добавить важный контент в качестве ответа.

SelectedIndex

Свойство SelectedIndex всегда возвращает индекс выбранного элемента в элементе управления. Индекс всегда начинается с 0. Первый элемент в элементе управления имеет индекс 0, а второй элемент имеет 1 индекс и т. Д.

SelectedValue

Ну, это свойство, с которым люди больше всего смущаются. Большинство из них считает, что свойство SelectedValue возвращает текст выбранного элемента. Да, он возвращает текст, но только если вы не указали значение отдельно. Значение в этих элементах управления – это то, что не отображается пользователю. Возьмем пример: вы добавляете элементы в ListBox1 динамически,

 ListBox1.Items.Add("iknowledgeboy"); 

Когда вы это сделаете, текст и значение этого элемента станут «iknowledgeboy». Итак, когда вы говорите:

ListBox1.SelectValue;

то вы получите «iknowledgeboy» наверняка. НО, когда вы связываете свой ListBox1 с базой данных, вам необходимо указать DataTextField и который является DataValueField ListBox1. В то время значение каждого элемента в ListBox1 или Dropdown или CheckBoxList или RadioButtonList обычно является целым числом. Итак, если вы скажете:

 ListBox1.SelectedValue; 

то вы не получите текст, который вы видите, а получите это целочисленное значение.

Надеюсь, это поможет вам.

Interesting Posts

Перемещение больших объемов данных из одной базы данных в другую в кусках

DataGridView: определение значений или отношений SQL-ключа?

Хранимая процедура Wrapper для создания публикации для транзакционной репликации

NHibernate не будет продолжать переполнение DateTime SqlDateTime

Проблемы с пулом соединений Nhibernate

Есть 2 таблицы, A (столбец a) и B (столбец b). Я хочу найти количество вхождений каждого значения в столбец A таблицы a в столбец B таблицы b

Сохраненная процедура возвращает неправильные значения с помощью драйвера jdbc

Текущее значение последовательности в качестве параметра по умолчанию для хранимой процедуры

Выберите Name вместо ID в таблице с ID-Ref Column SQL

Как я могу присвоить каждому идентификатору учетной записи UserID два идентификатора учетной записи в mssql?

Регулярные выражения в TSQL

Рекурсивный запрос SQL Server 2005 с циклами в данных – возможно ли это?

SQL while цикл не обновляет таблицу

SQL Azure – один сеанс блокирует всю БД для обновления и вставки

Драйвер сервера ODBC SQL Server – Неверный синтаксис рядом с ошибкой «44444» – по методу recordset.UpdateBatch

Давайте будем гением компьютера.