Algunas técnicas para trabajar con el componente cxGrid, recopiladas de varias fuentes y útiles para mí personalmente.
Aspecto externo
La coloración del SOFTWARE de las celdas se puede realizar en los eventos OnCustomDrawCell
if (AViewInfo.GridRecord.Values[TableViewColumn1.Index])=1 then begin ACanvas.Brush.Color := clRed; ACanvas.Font.Style := [fsBold]; end;
Si desea pintar solo los altavoces individuales (en lugar de la línea completa), pinte el controlador de columna OnCustomDrawCell se puede definir como:
if TableView.Columns[AViewInfo.Item.Index].DataBinding.FieldName='COLUMN_1' then
Lo único que debe tener en cuenta es que este color no se muestra cuando se exporta a Excel. Debe pintar asignando únicamente controladores de tipo de «estilo» predeterminados «TableViewStylesGet***Style»:
procedure TMoneyMoveDetailForm.TableViewStylesGetContentStyle( Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); begin if (ARecord.Values[TableViewID_MONEY.Index])=null then begin AStyle :=cxStyleBold; end; end;
Colorear diferentes niveles de agrupación en diferentes colores.
procedure TPozSkladForm.TableViewStylesGetGroupStyle( Sender: TcxGridTableView; ARecord: TcxCustomGridRecord; ALevel: Integer; out AStyle: TcxStyle); begin if ALevel=0 then AStyle := cxStyleL0; // $00A0A0A0 if ALevel=1 then AStyle := cxStyleL1; // clSilver if ALevel=2 then AStyle := cxStyleL2; // $00E0E0E0 end;
La falta de coloración a través de los estilos (Style) en que el cursor se superpone a la coloración. Esto se puede omitir si en el controlador TableViewCustomDrawCell realiza la selección de la línea en sí (para CellSelect = True):
if AViewInfo.GridRecord.Selected then begin if AViewInfo.Selected then begin // under the inverse cursor, make the white font ACanvas.Font.Color := clWhite; end else begin // The rest of the line will be highlighted in blue font so as not to overwrite the background ACanvas.Font.Color := clBlue; ACanvas.Font.Style := [fsBold]; end; end;
Mostrar datos (filtros, agrupación, clasificación)
En el grupo TcxGrid GroupByBox ocultar y limpiar el área de una cuadrícula en la que está escrito «drag a column header here to group by ..»
TableView.OptionsView.GroupByBox := false;
Establezca programáticamente el filtro:
GridDBTableView1.DataController.Filter.Root.Clear; GridDBTableView1.DataController.Filter.Root.AddItem(GridDBTableView1.Columns[0], cxFilter.foLike,nomzak+"%",nomzak+"%"); GridDBTableView1.DataController.Filter.Active:=true;
Expandir y contraer grupos en tiempo de ejecución
TableView.DataController.Groups.FullCollapse; TableView.DataController.Groups.FullExpand; TableView.DataController.Options := TableView.DataController.Options + [dcoGroupsAlwaysExpanded]; // fix expand state
Acceso a datos y metadatos Grid
ejecutar en un bucle a través de todas las líneas visibles:
for I:=0 to cxGrid.DataController.FilteredRecordCount - 1 do begin cxGrid.DataController.Values[cxGrid.DataController.FilteredRecordIndex[i],YourColumnName.Index])
Recorra todas las líneas seleccionadas para dar cada identificador
for i := 0 to GridView1.Controller.SelectedRecordCount-1 do begin ID_RASHODD := GridView1.DataController.Values[GridView1.Controller.SelectedRecords[i].RecordIndex, GridView1ID_RASHODD.Index]; end;
Obtener cuadrícula de columnas en su nombre
TableView1.GetColumnByFieldName('FIELD_NAME')
Editar datos de usuario
Organización lista ComboBox a la celda:
Las propiedades configuradas en el ComboBox, completan la lista de eventos del conjunto de datos AfterScroll, si intenta hacerlo en onInitPopUp, la lista de caídas anteriores (?). Cómo rellenar:
TcxComboBoxProperties(NTableViewKMPNAME.Properties).Items.Clear; while not LookupQuery.Eof do begin TcxComboBoxProperties(NTableViewKMPNAME.Properties).Items.Add(LookupQuery['NM_NAME']); LookupQuery.Next; end;
La selección del usuario se verifica y se utiliza en el método OnValidate
Edición de números en la cuadrícula
En la vista Propiedades y configure el controlador CalcEdit OnEditValueChanged yuzaem (Sender as TcxCalcEdit) .Value y la situación actual en el conjunto de datos
Para hacer clic con el botón derecho en una columna en particular:
en el evento OnCellClick:
if ACellViewInfo.Item.Name='DzTableViewNRM_NAME' then if AButton=mbRight then
Procesando marque la casilla de verificación en la celda. En el evento OnChange:
if (Sender as TcxCheckBox).Checked then
Cambio de tablas en tiempo de ejecución
Agregar columnas en tiempo de ejecución:
var XCol : TcxGridDBBandedColumn; begin XCol := TableView.CreateColumn; XCol.Position.BandIndex := 1; XCol.DataBinding.FieldName:='quant'+sl[i]; XCol.DataBinding.ValueType := 'Float'; XCol.Caption := ss[i]; XCol.Width := 50; XCol.Tag := StrToInt(sl[i]); XCol.Summary.FooterKind := skSum; XCol.Summary.GroupFooterKind := skSum; XCol.Summary.GroupKind := skSum; XCol.Summary.FooterFormat := '0.##'; XCol.Summary.GroupFooterFormat := '0.##'; XCol.Summary.GroupFormat := '0.##';
Eliminando el tiempo de ejecución de la columna:
TableView.Columns[i].Destroy;
Adición de pandillas (bands):
b0 := TableView.Bands.Add; b0.Position.BandIndex := b.Index;