Pregunta

estoy usando un DevExpress TdxMemData en memoria TDataSet descendiente.Mientras se ha Filtrado:Booleano y filtro:Propiedades de cadena, en realidad no parece hacer nada con ellas automáticamente, sino que depende del resultado del parámetro Accept del evento OnFilterRecord.

Entonces, lo que estoy buscando es una manera (tal vez esté en TdxMemData o en algún otro lugar del conjunto de códigos de DevExpress) de analizar el texto del filtro y aplicarlo al conjunto de datos.

Idealmente, me gustaría encontrar una forma de probar una fila individual con el filtro para ver si coincide sin filtrarla del conjunto de datos (quiero resaltar las filas que coinciden con el filtro).

Cadena de filtro de ejemplo:

((Name = 'Jim') and (Rep > 1000)) or (Rep > 5000)

Entonces hay y anidados y o.En realidad, está construido por DevExpress TcxDBFilterControl.

Realmente espero que me esté perdiendo algo simple.

Actualizar: Abrí un billete con DevExpress para ver si apoyan algún tipo de solución.Encontré su respuesta estándar que no admiten filtrado en TdxMemData.

¿Fue útil?

Solución

Sé que esto no es la respuesta que busca, pero el conjunto de datos TdxMemData no apoya cadenas de filtro. Para utilizar cualquiera de los filtros de código de su propio evento o conjunto OnFilterRecord ProgrammedFilter true y poblar la filterlist con una lista de los registros que se filtran (en tiempo de ejecución).

Una posibilidad sería la de codificar su propio analizador para comparar la cadena de filtro contra el registro actual en caso OnFilterRecord.

Otros consejos

Es posible que desee ver en la sustitución de la TdxMemData con TkbmMemTable . Es gratis, funciona de manera similar al componente DX, y es compatible con las cadenas de filtros. Probablemente tomar mucho menos tiempo en puerto a través de lo que costaría implementar un analizador de cadena filtro en OnFilterRecord! Se va a trabajar con los otros componentes DX sin problemas.

Lo que usted está buscando no está filtrando los datos, sino una cuestión de mostrar de manera diferente si se cumple una condición. Si estás utilizando un TDBGrid para mostrar los datos, mira en el evento DrawColumnCell () en el TDBGrid:

procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DBG: TDBGrid;
begin
  DBG := TDBGrid(Sender);
  // Add any other conditions from your 'filter' here in the next line.
  if (YourData.FieldByName('WHATEVER').AsString = 'Jim') and
     (YourData.FieldByName('REP').AsInteger > 1000) then
    Column.Font.Color := clRed;
  DBG.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Dado que está utilizando TdxMemData, es probable que el uso de la red Devex, también. Tiene que tener una forma similar a hacer algo que no sea el dibujo por defecto; se puede utilizar una técnica similar allí. (No he utilizado el material Devex en pocos años;. Empleador actual no le gustan, y por lo tanto no va a saltar por los gastos :-()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top