c# - DataGridView dynamic selected row Color -


i working on custom datagridview derived system.windows.forms.datagridview.

in desired grid rows may have different colors due state, , want current row little different other rows, , difference in color being highlighted dynamic rather being static.

when select row, want keep previous color of row, highligh color relatively, have done whit code snippet:

color oldcolor; private void dgvmain_selectionchanged(object sender, eventargs e) {     oldcolor = dgvmain.currentrow.defaultcellstyle.backcolor;     color newcolor = color.fromargb(oldcolor.r  < 235 ? oldcolor.r + 20 : 0,                                     oldcolor.g, oldcolor.b);     dgvmain.currentrow.defaultcellstyle.backcolor = newcolor; } 

but have 2 problems:

  1. when select row, first code changes row's color, row gets selected color changes default selection color.
  2. when row loses selection (is deselcted) can not recover it's old color - have oldcolor don't know when currentrow changed, know rows have had changes in selection state, don't know row previous row change color.

is there workaround this? event or special code?


and if know better solution highlighting colors, i'll appreciate help.

there separate property selectionbackcolor in defaultcellstyle. use change selection color. can have default cell style stored , use restoring default values.

sample code:

public class betterdatagridview : datagridview {     private datagridviewcellstyle defaultstyle = new datagridviewcellstyle();     public betterdatagridview()     {      }      protected override void onrowstatechanged(int rowindex, datagridviewrowstatechangedeventargs e)     {         base.onrowstatechanged(rowindex, e);         if (rowindex > -1)         {             datagridviewrow row = this.rows[rowindex];             if (row.selected)             {                 color oldcolor = this.currentrow.defaultcellstyle.selectionbackcolor;                 e.row.defaultcellstyle.selectionbackcolor = color.fromargb(oldcolor.r < 235 ? oldcolor.r + 20 : 0,                                     oldcolor.g, oldcolor.b);             }             else if (!row.selected)             {                 e.row.defaultcellstyle.selectionbackcolor = defaultstyle.selectionbackcolor;             }         }     } } 

Comments

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -