好吧,正如标题所说,我正在尝试从数据库填充组合框,然后根据组合框中的更改更改checkedlistbox的内容。这里的问题是,我尽可能地迷失方向。我决定使用访问数据库(db1.mdb,与exe相同的目录)。主数据表Table1具有应该放在组合框中的项目的名称(item1,item2,item3)。然后,我为每个值(tableitem1,tableitem2,tableitem3)都有单独的表,并且列表框将一次使用这些表,列出“项目名称”字段,其中每个表中的金额各不相同。检查checkedlistbox中的选项后,我需要从与选中列表框关联的数据库表中获取该表中“value1和value2”中其他列的值。我已经编程了大约5年,但之前从未需要操作数据库,所以我完全迷失了。
答案 0 :(得分:0)
我在这里找到了一些很好的代码和建议。显然我的主要问题是表名中的间距,所以我删除了表和代码中的空格。此代码用于在组合框和checkedlistbox中加载适当的值。现在,我只需要从对应于已检查列表的行中加载值,并将来自2个不同列的值加载到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();
}