2013-04-15 2 views
0

DataGridView (dgv)를 어댑터에 바인딩하면 dgv에 테이블 내용이 자동으로 채워집니다. 텍스트로 표시되는 열 중 하나이지만 ComboBox로 변경하려고합니다. 대신어댑터 및 콤보 상자가있는 DataGridView

spendingsAdapter = PrepareSpendingsAdapter(); 
spendingsAdapter.Fill(cachedData); 
dgvPointsSpent.DataSource = cachedData.Tables["spendings"]; 

:

MySqlDataAdapter awardsAdapter, spendingsAdapter; 
DataSet cachedData = new DataSet(); 
MySqlDataAdapter PrepareSpendingsAdapter() { 
try { 
     MySqlDataAdapter adapter; 
     adapter = new MySqlDataAdapter("select * from spendings", connection); 
     adapter.TableMappings.Add("Table", "spendings"); 

     adapter.UpdateCommand = new MySqlCommand(
      "UPDATE spendings SET [email protected], [email protected] WHERE [email protected];", 
      connection); 
     adapter.UpdateCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID");     
     adapter.UpdateCommand.Parameters.Add("@category", MySqlDbType.Int32, 10, "Category"); 
     adapter.UpdateCommand.Parameters.Add("@points", MySqlDbType.Int32, 10, "Points");     
     adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; 

     adapter.InsertCommand = new MySqlCommand(
      "INSERT INTO spendings VALUES (@id,@category,@points);", 
      connection); 
     adapter.InsertCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID"); 
     adapter.InsertCommand.Parameters.Add("@category", MySqlDbType.Int32, 10, "Category"); 
     adapter.InsertCommand.Parameters.Add("@points", MySqlDbType.Int32, 10, "Points"); 
     adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None; 

     adapter.DeleteCommand = new MySqlCommand(
      "DELETE FROM spendings WHERE [email protected];", connection); 
     adapter.DeleteCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID"); 
     adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None; 

     return adapter; 
    } catch (Exception ex) { 
     MessageBox.Show(ex.Message); 
    } 
    return null; 
} 

이 코드는

DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn(); 
MySqlDataAdapter adapterSpendCategory = new MySqlDataAdapter("select category,details from spendcategory", connection); 
adapterSpendCategory.TableMappings.Add("Table", "spendcategory"); 
adapterSpendCategory.Fill(cachedData); 
cmb.DataSource = cachedData.Tables["spendcategory"]; 
cmb.DisplayMember = "details"; 
cmb.ValueMember = "category"; 
//Put the missing piece of the puzzle here 

이 코드는 DataGridView를 채 웁니다 내가 필요로하는 정보를 추가로 열을 추가 :

이 코드는 데이터 어댑터를 준비합니다 이 추가 열을 추가하는 중 카테고리 열을 변경하고 여분의 공동처럼 보이길 원합니다. 당신이 그것을 데이터 그리드보기를 추가하고 선택하기 위해 디자이너를 사용하는 경우 lumn

enter image description here

답변

1

, 당신은 일부 속성에 작은 화살표가 나타납니다. 일반적으로이 메소드를 사용하여 DataGridview를 바인딩 소스에 바인딩합니다. 화살표를 사용하여 "열 편집"할 수도 있습니다. 각 동전에 대해 표시 여부를 선택할 수 있으며, 순서와 데이터 표시 방법을 선택할 수 있습니다 (텍스트는 콤보 상자처럼 숫자로 표시됩니까?).

사용자가 필요로하는 콤보 상자 열을 이미 추가 한 경우 "열 편집"으로 이동하여보고 싶지 않은 열을 선택하고 목록에서 제거하십시오. 또는 열의 속성을 사용하여 보이지 않게 할 수 있습니다.

일반적으로 추가 열은 추가하지 않지만 속성 대신 텍스트 대신 콤보 상자를 표시합니다.

+0

디자이너를 사용하지 않습니다. 디자이너와 mySQL을 함께 사용할 수 있습니까? –

0

대답은 줄을 추가하는 것 같습니다 . spendingsAdapter.Fill(..)를 호출하기 전에이 행을 추가하면 이미 존재하는 열을 인식하고 새 열을 생성하지 않으므로이 트릭이 수행됩니다.

관련 문제