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,