2011-04-06 88 views
0

好的,正如标题所说,我试图从数据库中填充组合框,然后根据组合框中的更改更改checkedlistbox的内容。这里的问题是,我会像我一样迷失。我决定使用访问数据库(db1.mdb,与exe文件位于同一目录中)。主数据表Table1具有应放在组合框(item1,item2,item3)中的项目名称。然后,我为每个值(tableitem1,tableitem2,tableitem3)都有单独的表格,并且列表框将一次使用这些表格,其中列出了“项目名称”字段,其中每个表格中的金额都不相同。在检查checkedlistbox中的选项后,我需要从与检查列表框关联的数据库表中获取该表中其他列的值“value1和value2”中的值。我已经编程了大约5年,但从来没有需要操纵数据库,所以我完全失去了。从数据库中填充组合框和CheckedListBox C#

+0

你能稍微清楚一点吗?根据我的理解,到目前为止,您想要在Combobox中获取数据,并且当某人选择了某些内容时,您希望获取其他值并显示为checkboxlist。您是否知道如何创建DataSet并将其绑定到控件?如果否 - 我会建议先从基础知识开始......做一些简单的事情,然后你可以尝试一下自己。 – sajoshi 2011-04-06 05:30:11

+0

如果你已经编程了5年,你应该知道如何填充组合框,等等 - 也许你应该发布一个只涉及数据访问部分的问题?这个问题不会得到很好的答案,因为它太宽泛了。 – 2011-04-06 05:55:24

+0

我会澄清...所有数据库值都是文本值。数据集是我感到困惑的地方,我可以使用之前在此处获得的一些信息轻松加载组合框,但是随后在组合框中从名称中提取新数据表给我一个偏头痛。我已经编程了5年以上的基本形式,我对c#很新,我以前只做过娱乐编程,所以我从来不需要构建数据库并从中加载。我尝试着将OP作为信息尽可能地提供给所有人,并显然失去了清晰度。虽然Sajoshi似乎有我的一般意图。 – James 2011-04-06 06:15:39

回答

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(); 
    }