Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. coloring a cell via datagridview cellformatting event

coloring a cell via datagridview cellformatting event

Scheduled Pinned Locked Moved C#
businesshelpquestion
4 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    leone
    wrote on last edited by
    #1

    Hi. I try to color specific cells of a datagridview in cellformatting. everything is ok but if i color first row's cell, other rows' cells are coloured with the same color. so, for the time being i excluded to color first row. what should be the problem? this is the code:

    if (e.ColumnIndex == 2) //my spesific column
    {
    if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() !=bookmark_id.ToString()) //dont mind this line, business logic
    {
    //specialStates is an enum
    if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Anlasildi).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Anlasildi_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Anlasildi_Forecolor; }
    else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Onemli).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Onemli_Backcolor; ; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Onemli_Forecolor; }
    else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Soru).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Soru_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Soru_Forecolor; }

                }
               
            }
    
    L OriginalGriffO L 3 Replies Last reply
    0
    • L leone

      Hi. I try to color specific cells of a datagridview in cellformatting. everything is ok but if i color first row's cell, other rows' cells are coloured with the same color. so, for the time being i excluded to color first row. what should be the problem? this is the code:

      if (e.ColumnIndex == 2) //my spesific column
      {
      if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() !=bookmark_id.ToString()) //dont mind this line, business logic
      {
      //specialStates is an enum
      if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Anlasildi).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Anlasildi_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Anlasildi_Forecolor; }
      else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Onemli).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Onemli_Backcolor; ; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Onemli_Forecolor; }
      else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Soru).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Soru_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Soru_Forecolor; }

                  }
                 
              }
      
      L Offline
      L Offline
      Luc Pattyn
      wrote on last edited by
      #2

      Hi, DataGridView may well be the most complex Control in the entire WinForms universe. Cells have a DefaultStyle and a Style. First row and/or first column may have different behavior (e.g. for column headers). IMHO inside the CellFormatting handler you are expected to only alter the Value and the CellStyle fields of the DataGridViewCellFormattingEventArgs that is passed to you, and both apply to the cell that is invoking the handler. If you need more than that, I'm afraid you may need to use explicitly created DataGridViewCellStyle objects for each cell you may want to alter the style of. You may want to start reading here: Cell Styles in the Windows Forms DataGridView Control | Microsoft Docs[^] Anyhow, it may take quite some experimentation to tame the beast. :) PS: if you don't have column headers right now, the easiest way out could well be to add them; that way you dont have actual data in row zero!

      Luc Pattyn [My Articles] Nil Volentibus Arduum

      1 Reply Last reply
      0
      • L leone

        Hi. I try to color specific cells of a datagridview in cellformatting. everything is ok but if i color first row's cell, other rows' cells are coloured with the same color. so, for the time being i excluded to color first row. what should be the problem? this is the code:

        if (e.ColumnIndex == 2) //my spesific column
        {
        if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() !=bookmark_id.ToString()) //dont mind this line, business logic
        {
        //specialStates is an enum
        if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Anlasildi).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Anlasildi_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Anlasildi_Forecolor; }
        else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Onemli).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Onemli_Backcolor; ; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Onemli_Forecolor; }
        else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Soru).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Soru_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Soru_Forecolor; }

                    }
                   
                }
        
        OriginalGriffO Offline
        OriginalGriffO Offline
        OriginalGriff
        wrote on last edited by
        #3

        Have a look here: Colouring DataGridView Cells According to their Content in WinForms[^] But ... why are you converting everything to a string in order to compare them? If you have numbers, compare them as numbers.

        Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!

        "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
        "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

        1 Reply Last reply
        0
        • L leone

          Hi. I try to color specific cells of a datagridview in cellformatting. everything is ok but if i color first row's cell, other rows' cells are coloured with the same color. so, for the time being i excluded to color first row. what should be the problem? this is the code:

          if (e.ColumnIndex == 2) //my spesific column
          {
          if (dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() !=bookmark_id.ToString()) //dont mind this line, business logic
          {
          //specialStates is an enum
          if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Anlasildi).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Anlasildi_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Anlasildi_Forecolor; }
          else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Onemli).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Onemli_Backcolor; ; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Onemli_Forecolor; }
          else if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == ((int)specialStates.Soru).ToString()) { dataGridView1.Rows[e.RowIndex].Cells["content"].Style.BackColor = Renk_Soru_Backcolor; dataGridView1.Rows[e.RowIndex].Cells["content"].Style.ForeColor = Renk_Soru_Forecolor; }

                      }
                     
                  }
          
          L Offline
          L Offline
          leone
          wrote on last edited by
          #4

          Thank you for your replies. Simply i didnt like cellformatting so i wrote my own function. I used a foreach and got all rows from datagridview and coloured related cells. I know it is against performence but this thing doesnt require much performence. Thanks again.

          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • World
          • Users
          • Groups