2011-04-06 118 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(); 
    }