2014-10-20 5 views
0

다음 코드를 사용하여 LINQ 및 엔터티 프레임 워크를 사용하는 DataGridview에서 콤보 상자 열을 생성합니다.C# LINQ에서 콤보 상자 값 사용

dgvLoadTable.DataSource = null; 
var context = new BatchEntities(); 
var TableName = cboSelectTable.Text.ToString(); 
var rawData = context.GetType().GetProperty(TableName).GetValue(context, null); 
var truncatedData = ((IQueryable<object>)rawData).Take(0); 
var source = new BindingSource { DataSource = truncatedData }; 

dgvLoadTable.DataSource = source; 
dgvLoadTable.ReadOnly = false; 
dgvLoadTable.AllowUserToAddRows = true; 

var practices = (from p in context.TABLE1 select p.PRACTICE).Distinct(); 

for(int r= 0; r < dgvLoadTable.Rows.Count; r++) 
{ 
    for(int c = 0; c < dgvLoadTable.Columns.Count; c++) 
    { 
     if(c == 2 || c == 4) 
     { 
      this.dgvLoadTable[c, r] = new DataGridViewComboBoxCell(); 
      foreach(var name in practices) 
       ((DataGridViewComboBoxCell)dgvLoadTable[c, r]).Items 
                   .AddRange(practices.ToArray()); 
     } 
    } 
} 
dgvLoadTable.Refresh(); 

여기에 for 루프에서 var 연습을 사용하여 콤보 상자 항목을 설정하지만 다른 열에 대해서는 항목이 달라집니다. 이 방법으로 각 열에 대해 다른 변수를 만들어야합니다. tablename이 cboSelectTable에서 선택되고 if 문에 명시된대로 색인에 의해 열이 선택되는 일반 코드를 사용하여이 작업을 수행 할 수 있습니까? 가능하면 도와주세요.

  DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(); 
      dataGridView1.Columns.Add(chk); 
      chk.HeaderText = "Check Data"; 
      chk.Name = "chk"; 
      dataGridView1.Rows[2].Cells[3].Value = true; 

는 일반적으로 당신이 "CurrentCell"메도와 세포를 호출

CODE ... 예 :

+0

WinForms, WebForms, WPF 또는 다른 것? – Richard

+0

WinForms를 사용하고 있습니다. – feather

+1

'AddRange (practices)'를 수행하는'연습 '에서'foreach'를하고있는 이유는 무엇입니까? 'foreach'가없는'AddRange' 나'Add (name)'가있는'foreach'처럼 보일 것 같습니다. – juharr

답변

0

다음 코드와 Checkboxrow를 삽입 할 수 있습니다

코드

private void dgvLoadTable_CelldoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 
     //do some code here 
     if (e.ColumnIndex == 1) // Check the current ColumnIndex... 
     { 
      //do some code here 

     } 

각 행마다 변수를 설정하지 않아야합니다. 나는 이것이 당신을 도왔 으면 좋겠다!