2012-09-20 24 views
8

İlginç bir sorun var. Bir datagridview için veri kaynağı olarak bir datatable kullanmaya çalışıyorum. Tablonun bazı hücrelerini çeşitli şeyleri göstermek için renklendirmek istiyorum, ancak bir nedenden ötürü renk gösterilmeyecek. Bu yüzden aşağıdaki kod renklenmemiş bir hücreyi gösterir.Veri kaynağı kullanırken datagridview hücre rengini değiştiremiyorum

dataGridView1.DataSource = table; 

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow; 

sadece bir renk (tıklatıldığında olay, bir hücre rengini, örneğin) bir başlangıç ​​formu yük sonra gösterilecek alabilirsiniz. Ancak, aşağıdaki kodda olduğu gibi görünüm için satır ve sütunları açıkça oluşturursam, renklendirme çalışır.

foreach (DataColumn col in table.Columns) 
    dataGridView1.Columns.Add(col.ColumnName, col.ColumnName); 

for (int i = 0; i < table.Rows.Count; i++) 
{ 
    var row = table.Rows[i]; 
    object[] values = new object[table.Columns.Count]; 
    for (int x = 0; x < table.Columns.Count; x++) 
     values[x] = row[x].ToString(); 

    dataGridView1.Rows.Add(values); 
} 

dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow; 

Kodu bu şekilde sahip olmak istemiyorum. Burada neler olduğunu bilen var mı, beni hücrelerin renklendirmesini engelliyor mu?

+1

Hücreleri renklendirmeye çalıştığınız yeri göstermezsiniz - InitializeComponent() çağrıldıktan sonra form oluşturucunun içinde olduğunu tahmin ediyorum. Cevabım buna dayanıyor. –

cevap

19

(sadece bana sorma DataGridView olanların Sorunlar biri

buna en basit düzeltme bir süre sonra renkleri ayarlamak için - genellikle bir DataBindingComplete olay işleyicisi içinde:.

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow; 
} 

Bu gr statik boyama için uygundur id - Renklerin ızgara içindeki değişikliklere göre değişmesini istiyorsanız, hücreleri değiştirmek için CellFormatting olayını kullanın.

+0

harika! teşekkür ederim! bana çok yardımcı oldu – Novikoff

+0

Ayrıca bkz. https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/cell-styles-in-the-windows-forms-datagridview-control, see section ' Stilleri Dinamik Olarak Ayarlama. – Wollmich

5

Bu son zamanlarda uyguladığım bir şey mi, yardımcı olacak mı bilmiyorum? Eğer denemek ve hücrelere değişiklikler sadık kalmaz veriler tamamlandıktan bağlanma önce isabet olacaktır formun yapıcı içerisinde hücre rengini ayarlamak, neden

private void dgvOutstandingReports_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
      { 
       int colIndex = e.ColumnIndex; 
       int rowIndex = e.RowIndex; 


       if (rowIndex >= 0 && colIndex >= 0) 
       { 
        DataGridViewRow theRow = dgvOutstandingReports.Rows[rowIndex]; 


        if (theRow.Cells[colIndex].Value.ToString() == "Daily Report") 
        { 
         theRow.DefaultCellStyle.BackColor = Color.LightYellow; 
        } 
        else if (theRow.Cells[colIndex].Value.ToString() == "Monthly Report") 
        { 
         theRow.DefaultCellStyle.BackColor = Color.LightGray; 
        } 
        else if (theRow.Cells[colIndex].Value.ToString() == "SMP Report") 
        { 
         theRow.DefaultCellStyle.BackColor = Color.Snow; 
        } 
        else if (theRow.Cells[colIndex].Value.ToString() == "Weekly Report") 
        { 
         theRow.DefaultCellStyle.BackColor = Color.Pink; 
        } 
        else if (theRow.Cells[colIndex].Value.ToString() == "Hourly Report") 
        { 
         theRow.DefaultCellStyle.BackColor = Color.LightSteelBlue; 
        } 
       } 
      } 
İlgili konular