2016-07-12 15 views
1

In einem Windows Forms DataGridView versuche ich, die ausgewählte Zeile fett Schrift und nicht die Hintergrundfarbe zu ändern.Font-Überlappung in DataGridView

Für diese Angelegenheit habe ich den folgenden Code:

// This method is used to load the data into the grid 
private void GridLoad() 
{ 
    // Configures the Data Source 

    Grid.DefaultCellStyle.SelectionBackColor = Color.Transparent; 

    Grid.ClearSelection();   
} 

private void Grid_SelectionChanged(object sender, EventArgs e) 
{ 
    var dataGridView = Grid; 

    foreach (DataGridViewRow row in dataGrid.Rows) 
    { 
     row.DefaultCellStyle.Font = dataGrid.Font; 
    } 

    if (dataGridView.SelectedRows.Count > 0) 
    { 
     var selectedRow = dataGridView.SelectedRows[0]; 
     selectedRow.DefaultCellStyle.Font = new Font(dataGridView.Font, FontStyle.Bold); 
    }    
} 

Der Code funktioniert, wenn ich eine der Zeilen klicken, um es auszuwählen, die Schriftart fett wird, aber es gibt eine Überlappung.

Der Text wird dupliziert, es scheint, als ob der Originaltext in regulärer Schriftart im Hintergrund bleibt und der neue Text in Fettdruck oben leicht nach rechts verschoben erscheint.

Warum passiert es? Warum passiert diese Überschneidung und wie löse ich sie?

Antwort

2

Das Hauptproblem ist in dieser Zeile:

dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Transparent; 

es entfernen und dann werden Sie kein Problem in Rendering haben.

nicht SelectionBackColor-Color.Transparent gesetzt Sie, wenn Sie eine haben wollen Wenn Sie SelectionBackColor auf den gleichen Wert wie BackColor der Zelle setzen keine transparente Auswahl Hintergrundfarbe für Zellen haben wollen, dann ist es genug.

Ein geeigneteres Ereignis für diesen Zweck ist CellFormatting Ereignis von DataGridView. Mit diesem Ereignis können Sie eine dynamische Formatierung für Zellen bereitstellen:

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.ColumnIndex >= 0 && e.RowIndex >= 0 && 
     this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected) 
    { 
     e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold); 
     e.CellStyle.SelectionForeColor = e.CellStyle.ForeColor; 
     e.CellStyle.SelectionBackColor = e.CellStyle.BackColor; 
    } 
    else 
    { 
     e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Regular); 
    } 
} 
+0

Danke für die Antwort. Das funktioniert auch, es macht die Schriftart der ausgewählten Zeile korrekt fett, aber es gibt immer noch das Problem der Überlappung. Hast du eine Ahnung, was es sein könnte? Danke noch einmal! – user1620696

+0

Überprüfen Sie die bearbeitete Antwort, das Hauptproblem ist in dieser Zeile: 'Grid.DefaultCellStyle.SelectionBackColor = Color.Transparent;'. Entfernen Sie es und dann haben Sie kein Problem beim Rendern. Wenn Sie keine 'SelectionBackColor' haben wollen, reicht es aus,' SelectionBackColor' auf den Wert von 'BackColor' der Zelle zu setzen. –

+0

Danke für das Feedback :) –