2014-10-20 44 views
0

我正在使用下面的代碼來使用LINQ和實體框架在datagridview中生成combobox列。c#在LINQ中使用combobox值

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語句中所述的索引來選擇。如果可能,請幫助,謝謝。

+0

WinForms,WebForms,WPF或其他? – Richard 2014-10-20 12:16:15

+0

我正在使用WinForms – feather 2014-10-20 12:26:09

+1

爲什麼要在'practices'上做一個'foreach'來做一個'AddRange(practices)'?似乎應該只是沒有'foreach'的'AddRange'或者''添加(名稱)''的'foreach'。 – juharr 2014-10-20 12:27:24

回答

0

可以插入Checkboxrow用下面的代碼:

CODE

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

通常你打電話的 「CurrentCell」 梅索德細胞...如:

代碼

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

     } 

所以你不能爲每一行設置一個變量。我希望這對你有所幫助!