2011-04-06 6 views
0

제목에서 알 수 있듯이 데이터베이스에서 콤보 상자를 채우고 콤보 상자의 변경 내용을 기반으로 checkedlistbox의 내용을 변경하려고합니다. 여기서 문제는 내가 할 수있는만큼 잃어버린 것입니다. 나는 EXE와 같은 dir에서 db1.mdb라는 액세스 데이터베이스를 사용하기로 결정했습니다. 기본 데이터 테이블 Table1에는 콤보 상자 (item1, item2, item3)에 있어야하는 항목의 이름이 있습니다. 그런 다음 각 값 (tableitem1, tableitem2, tableitem3)에 대해 별도의 테이블을 가지고 있으며 목록 상자는 각 테이블에 다양한 금액이있는 "항목 이름"필드를 나열하여 한 번에 하나씩 사용합니다. checkedlistbox의 옵션을 확인한 후, 체크리스트 상자와 관련된 데이터베이스 테이블의 해당 테이블 "value1 and value2"의 다른 열에서 값을 가져와야합니다. 나는 약 5 년 동안 프로그래밍을 해왔지만, 전에는 데이터베이스를 조작 할 필요가 없었기 때문에 완전히 잃어 버렸습니다.데이터베이스에서 ComboBox 및 CheckedListBox 채우기 C#

+0

좀 더 명확 할 수 있습니까? 지금까지 내 이해에 따라 Combobox에서 데이터를 가져오고 싶습니다. 누군가가 뭔가를 선택하면 다른 값을 가져 와서 checkboxlist로 표시하려고합니다. DataSet을 만들고 컨트롤에 바인딩하는 방법을 알고 있습니까? 아니요 - 기본으로 시작하는 것이 좋습니다 ... 간단한 것을 한 다음 직접 시도해보십시오. – sajoshi

+0

5 년간 프로그래밍을 해왔다면 콤보 박스를 채우는 방법 등을 알고 있어야합니다. 데이터 액세스 부분 만 다루는 질문을 올리십시오. 이 질문은 너무 광범위하기 때문에 좋은 답변을 얻지 못할 것입니다. –

+0

분명히하겠습니다 ... 모든 데이터베이스 값은 텍스트 값입니다. 데이터 세트는 내가 혼란스러워하는 곳이며, 이전에 얻은 정보를 사용하여 충분히 쉽게 콤보 박스를로드 할 수 있지만 콤보 상자의 이름에서 새 데이터 테이블을 가져 오는 것이 편두통을주고 있습니다. 저는 5 년 이상 기본 형태로 프로그래밍 했었습니다. 저는 C#에 익숙하지 않았습니다. 과거에는 레크리에이션 프로그래밍 만 했으므로 데이터베이스를 만들고로드 할 필요가 없었습니다. 나는 가치있는 이름과 모든 것을 할 수있는만큼 OP를 유익한 것으로 만들려고 노력했다. 분명히 명확성을 잃어 버렸다. 사조시는 나의 일반적인 의도를 가지고있는 것 같다. – James

답변

0

여기에 더 많은 스레드와 관련된 유용한 코드와 조언이 있습니다. 외관상으로는 나의 주요한 문제는 테이블 이름에있는 간격으로이었다, 그래서 나는 테이블 및 부호에있는 공간을 제거했다. 이 코드는 combobox와 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(); 
    } 
관련 문제