coloring a cell via datagridview cellformatting event
-
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; }} }
-
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; }} }
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
-
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; }} }
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!
-
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; }} }
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.