从数据库填充ComboBox和CheckedListBox,C#
好的,正如标题所说,我试图从数据库中填充一个组合框,然后根据组合框中的更改更改checkedlistbox的内容。问题是,我已经尽可能地迷失了方向。我决定使用access数据库(db1.mdb,与exe位于同一目录中)。主数据表Table1包含应该放在组合框中的项的名称(item1、item2、item3)。然后,我对每个值都有单独的表(tableitem1、tableitem2、tableitem3),listbox将一次使用一个,列出“Item Name”字段,每个表中的字段数量不同。在选中checkedlistbox中的选项后,我需要从与选中列表框关联的数据库表中获取表“value1和value2”中其他列的值。我已经编程5年了,但以前从未需要操作数据库,所以我完全迷路了。我在这里找到了一些好的代码和建议,阅读了更多的线程。显然,我的主要问题是表名中的空格,所以我删除了表和代码中的空格。此代码用于在combobox和checkedlistbox中加载正确的值。现在,我只需要从对应于选中列表的行中加载值,并将来自2个不同列的值加载到2个不同的字符串数组中。这是我第一次使用数据库,所以我对系统如何解释我写的内容感到迷茫从数据库填充ComboBox和CheckedListBox,C#,c#,C#,好的,正如标题所说,我试图从数据库中填充一个组合框,然后根据组合框中的更改更改checkedlistbox的内容。问题是,我已经尽可能地迷失了方向。我决定使用access数据库(db1.mdb,与exe位于同一目录中)。主数据表Table1包含应该放在组合框中的项的名称(item1、item2、item3)。然后,我对每个值都有单独的表(tableitem1、tableitem2、tableitem3),listbox将一次使用一个,列出“Item Name”字段,每个表中的字段数量不同。在选中
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();
}
你能再清楚一点吗?根据我目前的理解,您希望在Combobox中获取数据,当有人选择某个内容时,您希望获取其他值并显示为checkboxlist。。您知道如何创建数据集并将其绑定到控件吗??如果没有-我建议先从基础开始。。。做一些简单的事情,然后你可以自己尝试。如果你已经做了5年的编程,你应该知道如何填充组合框等等-也许你应该发布一个问题,只解决数据访问部分?这个问题不会得到很好的答案,因为它太宽泛了。我会澄清。。。所有数据库值都是文本值。数据集正是我感到困惑的地方,我可以使用我之前在这里获得的一些信息轻松地加载组合框,但是从组合框中的名称获取新的数据表让我头疼。我已经用basic编程5年多了,我对c#还是个新手,过去我只做过娱乐性编程,所以我从来不需要建立数据库并从中加载。我试着用值名称和所有内容尽可能地提供信息,但显然失去了清晰度。Sajoshi似乎有我的一般意图。ConnectionString应该类似于“provider=microsoft.jet.oledb.4.0;data source=c:/path/MyDB.mdb”。