This is a migrated thread and some comments may be shown as answers.

Change ForeColor of selectedRow when gridviewcheckboxcolumn is set to true

3 Answers 356 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Fernan
Top achievements
Rank 1
Fernan asked on 03 May 2010, 04:01 PM
Hi,

private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e) 
        { 
            if (sender is GridCheckBoxCellElement) 
            { 
                if ((bool)((GridCheckBoxCellElement)e.CellElement).Value == true
                { 
                    e.CellElement.RowElement.ForeColor = Color.Red; 
                } 
                 
 
            } 
        } 

But the "Value" parameter is System.dBNull. ¿why? .

Thanks,



3 Answers, 1 is accepted

Sort by
0
Svett
Telerik team
answered on 04 May 2010, 06:40 PM
Hi Fernan,

I suppose that the cell value is DBNull, because of its data source value. I have changed your code because if you want to change the fore color of the cell you should set its property (not the row's property ForeColor). You can use the following code snippet:

private void radGridView_CellFormatting(object sender, CellFormattingEventArgs e)
{
    GridViewDataRowInfo dataRow = e.CellElement.RowInfo as GridViewDataRowInfo;
    GridViewDataColumn dataCol = e.CellElement.ColumnInfo as GridViewDataColumn;
 
    if (dataRow == null || dataCol == null)
    {
        return;
    }
 
 
    object value = dataRow.Cells["Bool"].Value;
 
    if (value != null && Convert.ToBoolean(value))
    {
        e.CellElement.ForeColor = Color.Red;
    }
    else
    {
        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty);
    }
}

A bit off topic, please ask the person who has purchased our controls in your company to add you as a License Developer to the purchase. This will give you full access to the products your company has purchased, to our downloads section, and to our support ticketing system. Additionally, all your questions will be reviewed according to the license you have. More information on License Developers you can find here: www.telerik.com/account/faqs.aspx.

Kind regards,
Svett
the Telerik team

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
0
Fernan
Top achievements
Rank 1
answered on 05 May 2010, 08:13 AM
Hi, thanks you.

Yes, I am using data source values. I put your code and the error is the same: the value is dbNull:

System.InvalidCastException was unhandled 
  Message="No se puede convertir un objeto DBNull en otros tipos." 
  Source="mscorlib" 
  StackTrace: 
       en System.DBNull.System.IConvertible.ToBoolean(IFormatProvider provider) 
       en System.Convert.ToBoolean(Object value) 
       en GIREv2.Controls.BaseForm.radGridView1_CellFormatting(Object sender, CellFormattingEventArgs e) en E:\Proyectos\RadGridFilterXLS\RadGridFilterXLS\Controls\BaseForm.cs:línea 1885 
       en Telerik.WinControls.UI.RadGridView.OnCellFormatting(Object sender, CellFormattingEventArgs e) 
       en Telerik.WinControls.UI.RadGridView.CallCellFormatting(Object sender, CellFormattingEventArgs e) 
       en Telerik.WinControls.UI.GridDataCellElement.UpdateInfoCore() 
       en Telerik.WinControls.UI.GridCellElement.UpdateInfo() 
       en Telerik.WinControls.UI.GridRowElement.UpdateInfo() 
       en Telerik.WinControls.UI.GridDataRowElement.UpdateInfo() 
       en Telerik.WinControls.UI.GridRowElement.Initialize(GridViewRowInfo rowInfo) 
       en Telerik.WinControls.UI.GridTableBodyElement.UpdateRow(Int32 position, GridViewRowInfo rowInfo) 
       en Telerik.WinControls.UI.GridTableBodyElement.UpdateRowElements(IEnumerable`1 rows, RectangleF clientRect, Single& y, Int32& position, Int32 startIndex, Int32& added, Single left, Single width) 
       en Telerik.WinControls.UI.GridTableBodyElement.ArrangeOverride(SizeF finalSize) 
       en Telerik.WinControls.RadElement.ArrangeCore(RectangleF finalRect) 
       en Telerik.WinControls.RadElement.Arrange(RectangleF finalRect) 
       en Telerik.WinControls.Layouts.ContextLayoutManager.UpdateLayout() 
       en Telerik.WinControls.RadElement.UpdateLayout() 
       en Telerik.WinControls.UI.GridTableElement.EnsureRowVisible(GridViewRowInfo rowInfo) 
       en Telerik.WinControls.UI.GridTableElement.UpdateCurrentPosition() 
       en Telerik.WinControls.UI.GridViewInfo.SetCurrentRow(GridViewRowInfo row, Boolean setPosition, Boolean shift, Boolean control, Boolean rightMouseButton) 
       en Telerik.WinControls.UI.BaseGridNavigator.SelectNextRow(Int32 step, Boolean shift, Boolean control) 
       en Telerik.WinControls.UI.BaseGridNavigator.SelectNextRow(Int32 step, Boolean shift, Boolean control) 
       en Telerik.WinControls.UI.BaseGridBehavior.EnterOnNewRow() 
       en Telerik.WinControls.UI.BaseGridBehavior.ProcessEnterKey(KeyEventArgs keys) 
       en Telerik.WinControls.UI.BaseGridBehavior.ProcessKey(KeyEventArgs keys) 
       en Telerik.WinControls.UI.BaseGridBehavior.ProcessKeyDown(KeyEventArgs keys) 
       en Telerik.WinControls.UI.RadTextBoxEditorElement.OnKeyDown(KeyEventArgs e) 
       en Telerik.WinControls.UI.RadTextBoxItem.TextBoxControl_KeyDown(Object sender, KeyEventArgs e) 
       en System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m) 
       en System.Windows.Forms.Control.WmKeyChar(Message& m) 
       en System.Windows.Forms.Control.WndProc(Message& m) 
       en Telerik.WinControls.UI.HostedTextBoxBase.WndProc(Message& message) 
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
       en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
       en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
       en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
       en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
       en GIREv2.Program.Main() en E:\Proyectos\RadGridFilterXLS\RadGridFilterXLS\Program.cs:línea 27 
       en System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
       en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
       en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
       en System.Threading.ThreadHelper.ThreadStart() 
  InnerException:  


I want to change the row's forecolor and row's backcolor when the user set to true the checkbox cell.

Thanks,

0
Svett
Telerik team
answered on 10 May 2010, 09:48 AM
Hi Fernan,

The issue occurs due to DBNull.Value. You should change my previous code snippet to check for it:
private void radGridView_CellFormatting(object sender, CellFormattingEventArgs e)
{
    GridViewDataRowInfo dataRow = e.CellElement.RowInfo as GridViewDataRowInfo;
    GridViewDataColumn dataCol = e.CellElement.ColumnInfo as GridViewDataColumn;
  
    if (dataRow == null || dataCol == null)
    {
        return;
    }
  
  
    object value = dataRow.Cells["Bool"].Value;
  
    if (value != null && value != DBNull.Value && Convert.ToBoolean(value))
    {
        e.CellElement.ForeColor = Color.Red;
    }
    else
    {
        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty);
    }
}

Let us know if you have further issues.

Greetings,
Svett
the Telerik team

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
Tags
GridView
Asked by
Fernan
Top achievements
Rank 1
Answers by
Svett
Telerik team
Fernan
Top achievements
Rank 1
Share this question
or