Вопрос:
Хорошо, как говорится в заголовке, я пытаюсь заполнить combobox из базы данных, а затем изменить содержимое checklistbox на основе изменения в combobox. Проблема здесь в том, что я почти потерялся, как мог. Я решил пойти с базой данных доступа (db1.mdb, в том же каталоге, что и exe). Таблица первичных данных Table1 имеет имена элементов, которые должны отображаться в поле со списком (item1, item2, item3). Затем у меня есть отдельные таблицы для каждого значения (tableitem1, tableitem2, tableitem3), и список будет использовать их по одному, указав поля “Item Name”, из которых в каждой таблице будут разные суммы. После проверки опций в списке checklist я должен получить значения из других столбцов в этой таблице “value1 и value2” из таблицы базы данных, связанной с отмеченным списком. Я программировал около 5 лет, но мне никогда не приходилось манипулировать базой данных, поэтому я полностью потерялся.
Ответ №1
Я нашел хороший код и советы, читающие здесь больше потоков. По-видимому, моя основная проблема заключалась в расположении в именах таблиц, поэтому я удалил пробелы в таблицах и коде. Этот код работает для загрузки правильных значений как в combobox, так и в checklistbox. Теперь мне просто нужно загрузить значения из строк, соответствующих проверенному списку, и загрузить значения из двух разных столбцов в 2 разных строковых массива. Это мой первый раз, когда-либо работавший с базой данных, поэтому я просто терялся в том, как система интерпретировала то, что я написал.
private OleDbConnection myConn; private OleDbDataAdapter dAdapter; private DataViewManager dviewmanager; private DataSet dset; private OleDbConnection myConn2; private OleDbDataAdapter dAdapter2; private DataViewManager dviewmanager2; private DataSet dset2; private void cmbDatabaseFill() { string conStr = «Provider=Microsoft.Jet.OLEDB.4.0; Data Source=DB1.mdb»; try { myConn = new OleDbConnection(conStr); myConn.Open(); } catch (OleDbException ex) { MessageBox.Show(«Error in connection …» + ex.Message); } string sqlStr = «SELECT * FROM Index;»; dAdapter = new OleDbDataAdapter(sqlStr, myConn); dset = new DataSet(); dAdapter.TableMappings.Add(«Table», «Index»); dAdapter.Fill(dset); this.dviewmanager = dset.DefaultViewManager; this.cmbMain.DataSource = this.dviewmanager; this.cmbMain.DisplayMember = «Index.List»; this.myConn.Close(); } private void cmbMain_SelectedIndexChanged(object sender, EventArgs e) { clbDatabaseFill(); } private void clbDatabaseFill() { string newTableName = cmbMain.Text.Replace(» «, «»); string conStr = «Provider=Microsoft.Jet.OLEDB.4.0; Data Source=DB1.mdb»; try { myConn2 = new OleDbConnection(conStr); myConn2.Open(); } catch (OleDbException ex) { MessageBox.Show(«Error in connection …» + ex.Message); } string sqlStr = «SELECT * FROM » + newTableName + «;»; dAdapter2 = new OleDbDataAdapter(sqlStr, myConn2); dset2 = new DataSet(); dAdapter2.TableMappings.Add(«Table», newTableName); try { dAdapter2.Fill(dset2); } catch (System.Exception) { return; } this.dviewmanager2 = dset2.DefaultViewManager; this.clbOpt.DataSource = this.dviewmanager2; this.clbOpt.DisplayMember = newTableName + «.ValName»; this.myConn2.Close(); }