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,
