Hi,
I've put a custom checkbox in the header in order to select/unselect all row's checkbox. I use this code:
    
and:
    
This works fine. But the problem is the following:
I have to detect when the row's checkbox value is change to true or false. I use the ValueChanged event :
    
But..., when I use the header checkbox in order to select/unselect all,the ActiveEditor property is null.
    
        
¿How do I this?
Thank you,
Fernan,
                                I've put a custom checkbox in the header in order to select/unselect all row's checkbox. I use this code:
| public class CheckBoxHeaderCell : GridHeaderCellElement | 
| { | 
| RadCheckBoxElement checkbox; | 
| public CheckBoxHeaderCell(GridViewColumn column, GridRowElement row) | 
| : base(column, row) | 
| { | 
| } | 
| protected override void DisposeManagedResources() | 
| { | 
| checkbox.ToggleStateChanged -= new StateChangedEventHandler(checkbox_ToggleStateChanged); | 
| base.DisposeManagedResources(); | 
| } | 
| protected override void CreateChildElements() | 
| { | 
| base.CreateChildElements(); | 
| checkbox = new RadCheckBoxElement(); | 
| checkbox.ToggleStateChanged += new StateChangedEventHandler(checkbox_ToggleStateChanged); | 
| this.Children.Add(checkbox); | 
| ApplyThemeToElement(checkbox, "ControlDefault"); | 
| } | 
| protected override SizeF ArrangeOverride(SizeF finalSize) | 
| { | 
| base.ArrangeOverride(finalSize); | 
| if (checkbox != null) | 
| { | 
| RectangleF rect = GetClientRectangle(finalSize); | 
| checkbox.Arrange(new RectangleF(rect.Right - 20, (rect.Height - 20) / 2, 20, 20)); | 
| } | 
| return finalSize; | 
| } | 
| private void checkbox_ToggleStateChanged(object sender, StateChangedEventArgs args) | 
| { | 
| this.GridControl.BeginEdit(); | 
| for (int i = 0; i < this.GridControl.Rows.Count; i++) | 
| { | 
| this.GridControl.Rows[i].IsSelected = true; | 
| this.GridControl.Rows[i].IsCurrent = true; | 
| this.GridControl.Rows[i].Cells["Mostrar"].Value = this.checkbox.IsChecked; | 
| } | 
| this.GridControl.EndEdit(); | 
| } | 
| private void ApplyThemeToElement(RadItem item, string themeName) | 
| { | 
| DefaultStyleBuilder builder = ThemeResolutionService.GetStyleSheetBuilder((RadControl)item.ElementTree.Control, | 
| item.GetThemeEffectiveType().FullName, string.Empty, themeName) as DefaultStyleBuilder; | 
| if (builder != null) | 
| { | 
| item.Style = new XmlStyleSheet(builder.Style).GetStyleSheet(); | 
| } | 
| } | 
| } | 
and:
| private void radGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e) | 
| { | 
| if (e.Row is GridTableHeaderRowElement && e.Column.HeaderText == "Mostrar") | 
| { | 
| e.CellElement = new SMPDataAnalyzer.TelerikHeaderGrid.CheckBoxHeaderCell(e.Column, e.Row); | 
| } | 
| } | 
This works fine. But the problem is the following:
I have to detect when the row's checkbox value is change to true or false. I use the ValueChanged event :
| private void radGridView1_ValueChanged(object sender, EventArgs e) | 
| { | 
| try | 
| { | 
| if (this.radGridView1.ActiveEditor is RadCheckBoxEditor) | 
| { | 
| if (radGridView1.CurrentRow.Tag != null) | 
| { | 
| if ((bool)(this.radGridView1.ActiveEditor.Value) && !tendencias.ContainsKey(Convert.ToInt32(radGridView1.CurrentRow.Tag))) | 
| { | 
| if (radGridView1.SelectedRows.Count > 0) | 
| { | 
| medidastendencia = Controller.CargarValoresMedidas | 
| (long.Parse(radGridView1.CurrentRow.Cells["PuntoId"].Value.ToString()), | 
| fechaIni, fechaFin, | 
| long.Parse(radGridView1.SelectedRows[0].Cells["TipoEspectro"].Value.ToString()), | 
| long.Parse(radGridView1.SelectedRows[0].Cells["Nbanda"].Value.ToString())); | 
| if (medidastendencia.Count > 0) | 
| { | 
| ScatterPlot scatterPlot = new ScatterPlot(); | 
| scatterPlot.XAxis = xAxis2; | 
| scatterPlot.YAxis = yAxis2; | 
| scatterPlot.Tag = Convert.ToInt32(radGridView1.CurrentRow.Tag); | 
| scatterGraphTendencias.Plots.Add(scatterPlot); | 
| int i = 0; | 
| double[] fechas = new double[medidastendencia.Count]; | 
| double[] values = new double[medidastendencia.Count]; | 
| foreach (MedidaTendencia mt in medidastendencia) | 
| { | 
| fechas[i] = (Double)(DataConverter.Convert(mt.FechaMedida, typeof(Double))); | 
| values[i] = mt.Valor; | 
| i++; | 
| } | 
| scatterPlot.PlotXY(fechas, values); | 
| xyCursor2.Plot = scatterPlot; | 
| xyCursor2.SnapMode = CursorSnapMode.NearestPoint; | 
| xyCursor2.MoveNext(); | 
| xyCursor2.MovePrevious(); | 
| xyCursor2.Visible = true; | 
| if (!isTendenciaVisible) | 
| { | 
| isTendenciaVisible = true; | 
| activeTend(); | 
| } | 
| tendencias.Add(Convert.ToInt32(radGridView1.CurrentRow.Tag), values); | 
| } | 
| else | 
| { | 
| MessageBox.Show(Properties.Resources.ERROR_MEDIDAS_TEND); | 
| } | 
| } | 
| } | 
| else | 
| { | 
| //Se ha puesto a false | 
| if (tendencias.ContainsKey(Convert.ToInt32(radGridView1.CurrentRow.Tag))) | 
| { | 
| int i = 0; | 
| foreach (ScatterPlot plot in scatterGraphTendencias.Plots) | 
| { | 
| if (plot.Tag.ToString() == radGridView1.CurrentRow.Tag.ToString()) | 
| { | 
| if (i > 1) | 
| { | 
| xyCursor2.Plot = scatterGraphTendencias.Plots[i - 1]; | 
| xyCursor2.MoveNext(); | 
| xyCursor2.MovePrevious(); | 
| } | 
| else | 
| { | 
| if (scatterGraphTendencias.Plots.Count > 2) | 
| { | 
| xyCursor2.Plot = scatterGraphTendencias.Plots[i + 1]; | 
| xyCursor2.MoveNext(); | 
| xyCursor2.MovePrevious(); | 
| } | 
| else | 
| { | 
| xyCursor2.Plot = scatterPlot2; | 
| xyCursor2.Visible = false; | 
| desactiveTend(); | 
| } | 
| } | 
| scatterGraphTendencias.Plots.Remove(plot); | 
| plot.Dispose(); | 
| break; | 
| } | 
| i++; | 
| } | 
| tendencias.Remove(Convert.ToInt32(radGridView1.CurrentRow.Tag)); | 
| } | 
| } | 
| } | 
| } | 
| } | 
| catch (Exception ex) | 
| { | 
| string message = ex.Message; | 
| } | 
| } | 
But..., when I use the header checkbox in order to select/unselect all,the ActiveEditor property is null.
Thank you,
Fernan,

