2016-03-27 18 views
0

Bu veri kılavuzuna sahip olduğum bir windows formlarım var, iki sütundan sonra bir comboboxcell eklemek için tüm datagrid satırlarını aramaya çalışıyorum.DatagridViewRow.Cells.Add yöntemi çalışmıyor

Amacım, hücre [0] değerine dayanan öğeleri gösteren bir birleşik giriş sütunu bulundurmaktır.

İşte kodum ve datagrid satırına herhangi bir hücre ekleyemiyorum. Neyi yanlış yapıyorum?

private void UserAccessForm_Load(object sender, EventArgs e) 
{ 
    dataGridView1.DataSource = LoadData(); 
    AddPermissions(); 

} 

private DataTable LoadData() 
{ 
    ConnectionString = ConfigurationManager.ConnectionStrings["UserProfile"].ToString(); 
    DataSet ds = new DataSet(); 
    using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) 
    { 
     // Create the command and set its properties 
     sqlDataAdapter.SelectCommand = new SqlCommand(); 
     sqlDataAdapter.SelectCommand.Connection = new SqlConnection(ConnectionString); 
     sqlDataAdapter.SelectCommand.CommandType = CommandType.Text; 

     // Assign the SQL to the command object 
     sqlDataAdapter.SelectCommand.CommandText = string.Format(Script.sqlGetLocalSystem); 


     sqlDataAdapter.Fill(dt); 
    } 

    return dt; 
} 

public void AddPermissions() 
{ 
    DataTable dPermissions = new DataTable(); 
    long systemId = 0; 


    DataGridViewComboBoxCell comboBoxCell = null; 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     ArrayList permissions = new ArrayList(); 
     comboBoxCell = new DataGridViewComboBoxCell(); 
     systemId = Convert.ToInt64(row.Cells[0].Value); 
     dPermissions = LoadPermissions(systemId); 

     foreach (DataRow dataRow in dPermissions.Rows) 
     { 
      permissions.Add(dataRow["UserLevelCategoryName"].ToString()); 
     } 
     comboBoxCell.Items.AddRange(permissions.ToArray()); 

     row.Cells.Add(comboBoxCell); 

    } 
} 

Bunu nasıl başarabilirim?

+0

'DataGridViewComboBoxColumn' öğesini' DataGridView' 'Columns 'koleksiyonuna eklemelisiniz. –

+0

Teşekkürler, ben de sizin dikkatinizi çekiyorum. Ben senin çözüm denedim ama sorun olay dataGridView1_EditingControlShowing işleniyor, çünkü datagrid bir şey değiştirmek zorunda kalmaz çünkü ... otomatik olarak datagrid yüklü combobox da yüklenmesini istiyorum ... Umarım Bu kez temizle –

+0

İlk sorun, ızgara hücre koleksiyonuna hücre ekliyorsunuz. ** Bu yanlış! ** Cevap olarak tarif ettiğim şekilde bir combobox sütun ekleyebilirsiniz. Ardından açılan kutularda farklı öğelerin nasıl bulunacağıyla ilgili yeni bir soru sorun. –

cevap

0

Sen DataGridView ait DataGridViewComboBoxColumnColumns üzere koleksiyonu ekleyip sütunun DataSource listeyi belirlesin bir row.You hücreler koleksiyonuna hücreyi ekleyemezsiniz. Ayrıca, combo içinde gösterilecek bir veri kaynağı alanına DisplayMember değerini ayarlayın ve açılan menüden bir öğe seçtiğinizde değerini bir değer olarak kullanmak için ValueMember değerini bir veri kaynağı alanına ayarlayın.

Izgara denetiminiz de bir veri kaynağına bağlıysa ve bu sütunu, veri kaynağından bir alanın değerini göstermek için oluşturuyorsanız, sütununun DataPropertyName sütununu istediğiniz bir dosya veri kaynağına ayarlayın. Bu sütunu ona bağlamak için. Eğer başka bir hücreye dayalı her satırın açılan kutu içinde farklı öğeleri göstermek istiyorsanız

DataTable permissions = LoadPermissions(); //Load all permissions 
var column1 = new DataGridViewComboBoxColumn(); 
column1.Name = "column1"; 
column1.DataSource = permissions; 

//a column from Permissions table to use its value when the user select from combo box 
column1.ValueMember = "Id"; 

//a column from Permissions table to show its value in combo box 
column1.DisplayMember = "Name"; 

//a column from datasourec table of your grid which you want to bind column to 
column1.DataPropertyName = "PermissionId"; 

//Add column to grid 
this.categoryDataGridView.Columns.Add(column1); 

Sonra EditingControlShowing olayı işlemek ve düzenleme kontrolünü almak ve diğer hücrenin değerine bağlı olarak kontrol DataSource ayarlamalısınız.