Header back color

8 posts, 1 answers
  1. FilipN
    FilipN avatar
    15 posts
    Member since:
    Jul 2009

    Posted 21 Aug 2009 Link to this post

    Hello, 
    I am trying to change color of the header cell in currently selected column. I tried to achieve this as it is done in this post Change of back color, however the header cells will start to react only if the user hovers with mouse over specified columns before he starts clicking into the grid. 

    Here is the code snippet I use
            void electionChanged(object sender, EventArgs e)
            {
                if (SelectedCells.Count == 0)
                    return;
                int index = SelectedCells[0].ColumnInfo.Index;

                if (MasterGridViewInfo.TableHeaderRow.Cells[index].CellElement == null)
                    return;

               for (int i = 0; i < Columns.Count; i++ )
                    MasterGridViewInfo.TableHeaderRow.Cells[i].CellElement.ResetValue(LightVisualElement.BackColorProperty);

                MasterGridViewInfo.TableHeaderRow.Cells[index].CellElement.SetValue(
                    LightVisualElement.BackColorProperty, Color.Blue);
            }

    Can you please pinpoint where is the problem?
  2. Nick
    Admin
    Nick avatar
    767 posts

    Posted 21 Aug 2009 Link to this post

    Hello FilipN,

    No visual update is started so you need to manually trigger one. Please try the following code snippet:

    this.radGridView1.GridElement.Update(GridUINotifyAction.RowsChanged); 
     

    If this does not work, please try the following, although this can bring substantial performance overhead:

    this.radGridView1.GridElement.Update(GridUINotifyAction.Reset); 

    Please write me back with the result. I am looking forward to your reply.

    Regards,
    Nick
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. FilipN
    FilipN avatar
    15 posts
    Member since:
    Jul 2009

    Posted 21 Aug 2009 Link to this post

    Thanks for fast reply,
    I tried both. It has no effect. The second one (this.radGridView1.GridElement.Update(GridUINotifyAction.Reset); actully makes things even worse, because then the column's headers don't get painted to blue at all (not even if user tries to hover over the column's headers).

    Here comes the snippet i used for testing
            void CygGridViewTotalRow_SelectionChanged(object sender, EventArgs e)
            {
                if (SelectedCells.Count == 0)
                    return;
                int index = SelectedCells[0].ColumnInfo.Index;

                if (MasterGridViewInfo.TableHeaderRow.Cells[index].CellElement == null)
                    return;

                for (int i = 0; i < Columns.Count; i++)
                    MasterGridViewInfo.TableHeaderRow.Cells[i].CellElement.ResetValue(LightVisualElement.BackColorProperty);

                MasterGridViewInfo.TableHeaderRow.Cells[index].CellElement.SetValue(
                    LightVisualElement.BackColorProperty, Color.Blue);
    //  First i tried this          this.GridElement.Update(GridUINotifyAction.Reset); 
    //Then i commented former and uncommented this:
    //        this.radGridView1.GridElement.Update(GridUINotifyAction.RowsChanged); 
  5. Nick
    Admin
    Nick avatar
    767 posts

    Posted 24 Aug 2009 Link to this post

    Hello FilipN,

    I tried your code with our latest internal build and the header gets updated instantaneously after you set the color; you do not have to reset the grid. What values do you use for the following properties: SelectionMode and MultiSelect?

    Best wishes,
    Nick
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  6. Dave Galligher
    Dave Galligher avatar
    37 posts
    Member since:
    May 2010

    Posted 17 Mar 2011 Link to this post

    Hi guys,

    I realize this posting is fairly old, I'm on the Q32010 version but am in need of changing the background color of only certain columns. I know some of the elements described in the thread has been deprecated, so I'm using the the proper elements now, however I still don't have the results I'm looking for. The gridview is bound to a datasource, I wouldn't think this makes any difference, but I'm giving you this piece of information just in case, the column names come from a generic list that contains information about what columns I want to update based on a query process by the user, here is the code:

    ...
    foreach (FieldItem fi in ti.Fields)                
                        gvData.MasterView.TableHeaderRow.Cells[fi.FieldName].Style.BackColor = Color.Orange;

                    gvData.TableElement.Update(GridUINotifyAction.Reset);
    ...

    fi.FieldName above contains the name of the column for the cells value (I've also tried this using the index and that doesn't work either). Examples above specified the use of .CellElement.BackColor which does not exist in my version of the code, I had to use Style.BackColor instead. The color value could be any color, I just chose Orange.

    In desperation I tried the TableElement.Update command, but no positive results on this either.

    Any help would be appreciated. Thank you in advance.

    Dave
  7. Stefan
    Admin
    Stefan avatar
    2890 posts

    Posted 21 Mar 2011 Link to this post

    Hi Dave Galligher,

    Thank you for writing.

    If I understand correctly you want to style a column BackColor upon some condition. If this is the case you have to use CellFormatting (for data rows) or ViewCellFormatting (row all rows). Please refer to this help article, which demonstrates how you can customize your grid appearance using these events. 

    Let me know if this works for you.

    Kind regards,
    Stefan
    the Telerik team
  8. Dave Galligher
    Dave Galligher avatar
    37 posts
    Member since:
    May 2010

    Posted 21 Mar 2011 Link to this post

    Using the ViewCellFormatting it does change the background color of the cell on the header, but when the control scrolls horizontally, cell colors for the column headers get messed up for columns that do not fall in the evaluated cell, here is the code:

            /// <summary>
            /// Update the color of the foreground on the filter row -- without this the color is
            /// a light gray that is hard to read on some monitors.
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void gvData_ViewCellFormatting(object sender, CellFormattingEventArgs e)
            {
                GridFilterCellElement filterCell = e.CellElement as GridFilterCellElement;
                if (filterCell != null)
                    filterCell.FilterOperatorText.ForeColor = SystemColors.GradientActiveCaption;
                else
                {
                    if (e.CellElement is GridTableHeaderCellElement || e.CellElement is GridHeaderCellElement)
                    {
                        string columnText = e.CellElement.Value.ToString();
                        if (_queriedFields != null && _queriedFields.Contains(columnText))
                        {
                            e.CellElement.DrawFill = true;
                            e.CellElement.BackColor = Color.Orange;
                            e.CellElement.ForeColor = Color.White;
                            e.CellElement.GradientStyle = GradientStyles.Solid;
                        }
                    }
                }
            }           

    As you can see, it is looking for explicit values to change the column headers. The code executes as desired, but when the horizontal scroll happens columns that fall outside of the requirements now have the new formatting applied to them. This should not happen.

    See attached images.
  9. Answer
    Richard Slade
    Richard Slade avatar
    3000 posts
    Member since:
    May 2009

    Posted 21 Mar 2011 Link to this post

    Hello Dave,

    You need to reset the values wherever the condition is not met. This is because of the RadGridView's UI Virtualization system which re-uses cells. Please have a look at this help topic on cell formatting, in particular the section at the end which is on ViewCellFormatting.

    Hope that helps, but let me know if you need further information
    Richard
Back to Top
UI for WinForms is Visual Studio 2017 Ready