Login ProductsSalesSupportDownloadsAbout |
Home » Technical Support » Elevate Web Builder Technical Support » Support Forums » Elevate Web Builder General » View Thread |
Messages 1 to 9 of 9 total |
Row colouring example |
Thu, Jun 27 2019 12:17 PM | Permanent Link |
Matthew Jones | I can't find an example of how to colour the rows of a grid according to some aspect in the data for that row. Is there such?
Is it safe to assume that the grid's attached DataSet is currently on the drawn row? If it isn't simple, will this be easy in EWB3? -- Matthew Jones |
Thu, Jun 27 2019 1:30 PM | Permanent Link |
Raul Team Elevate | On 6/27/2019 12:17 PM, Matthew Jones wrote:
> I can't find an example of how to colour the rows of a grid according to some aspect in the data for that row. Is there such? Yes and it's pretty simple - you have to handle OnCellUpdate event and then you can use the cell Data property to see what data is actually present. For example something like : procedure TMainForm.GridColumn1CellUpdate(Sender: TObject; ACell: TGridCell); begin if ACell.Data ='0' then ACell.Background.Fill.Color:=clElevateLightGreen; end; Search NG for OnCellUpdate and there should be lot of references > Is it safe to assume that the grid's attached DataSet is currently on the drawn row? Not sure but i'd rely on OnCellUpdate and Cell Data property since grid itself could be redrawn for various reasons not related to dataset navigation. You can also use Acell.Index to know which column you're on (if you have same event for all of them) and also Grid.ROwIndex to know which row you're on Raul |
Fri, Jun 28 2019 3:50 AM | Permanent Link |
Matthew Jones | Raul wrote:
> if ACell.Data ='0' then ACell.Background.Fill.Color:=clElevateLightGreen; But that can't look at the third cell's data to set the whole row to green. That's the need, not just one cell. I guess I can use the single cell for now, but I want the whole row coloured (or left default). -- Matthew Jones |
Fri, Jun 28 2019 4:36 AM | Permanent Link |
Huseyin Aliz myBiss ApS | Hi Matthew,
I am using following: procedure TBilListeForm.SetupCells(ACell: TGridCell); begin     if (ACell.index mod 2=0) and (SameText(ACell.InterfaceState,NORMAL_STATE_NAME)) and (ACell.Index <> BilerGrid.RowIndex) then begin     ACell.Font.Size := 12;     ACell.Font.Color := clBlack;     ACell.Background.Fill.Color := clWhite;     end     else if (ACell.Index <> BilerGrid.RowIndex) and (SameText(ACell.InterfaceState,NORMAL_STATE_NAME)) then     begin     ACell.Font.Size := 12;     ACell.Font.Color := clBlack;     ACell.Background.Fill.Color:=clWhiteSmoke;     end;     if (ACell.Index = BilerGrid.RowIndex) and (SameText(ACell.InterfaceState,BOTH_STATE_NAME)) then begin     ACell.Font.Size := 12;     ACell.Font.Color := clWhite;     ACell.Background.Fill.Color := clRed;     end; end; procedure TBilListeForm.KontonrCellUpdate(Sender: TObject; ACell: TGridCell); begin SetupCells(ACell); end; procedure TBilListeForm.RegnrCellUpdate(Sender: TObject; ACell: TGridCell); begin SetupCells(ACell); end; etc... Hope it's something you can use Regards, Hüseyin Den 28-06-2019 kl. 09:50 skrev Matthew Jones: > Raul wrote: > >> if ACell.Data ='0' then ACell.Background.Fill.Color:=clElevateLightGreen; > But that can't look at the third cell's data to set the whole row to green. That's the need, not just one cell. > > I guess I can use the single cell for now, but I want the whole row coloured (or left default). > |
Fri, Jun 28 2019 4:42 AM | Permanent Link |
Matthew Jones | Thanks, but I can't see where it is getting the colour state from the data in the dataset? For colouring each row alternately, it would work nicely, but I want it to reflect a status in the data row. So an error state shows the whole line red, but others are normal.
-- Matthew Jones |
Sat, Jun 29 2019 10:55 AM | Permanent Link |
Raul Team Elevate | On 6/28/2019 3:50 AM, Matthew Jones wrote:
> Raul wrote: > >> if ACell.Data ='0' then ACell.Background.Fill.Color:=clElevateLightGreen; > > But that can't look at the third cell's data to set the whole row to green. That's the need, not just one cell. > > I guess I can use the single cell for now, but I want the whole row coloured (or left default). I did run some tests and it does look like the dataset is being also navigated as grid is updated so you could try it and see if you have any issues (only issue i can think of is if grid OnCellUpdate is trigerred without dataset cursor change) so something like this in the OnCellUpdate if MyBoundDataset.Columns['ValueICareAbout'].AsString = '0' then ACell.Background.Fill.Color:=clElevateLightGreen; Raul |
Thu, Jul 4 2019 10:58 AM | Permanent Link |
Richard Harding Wise Nutrition Coaching | Matthew,
I asked Tim a similar question back in November 2015. https://www.elevatesoft.com/forums?action=view&category=ewb&id=ewb_general&page=1&msg=8544#8544 The example below may be helpful. The customer is an engineering company and the DB manages the stock. Below is a view with some basic stock information. Whilst if is not possible to highlight a row, the following was sufficient for the customer which may be relevant in your case. CREATE VIEW "ADRSubstitute" AS SELECT StockNumber, Category, Number, Identity, Description FROM Stock WHERE Category = 'ADR' ORDER BY Category, Identity, Number StockNumber is the primary key formatted as XXX/<n> where XXX is the category. Each stock item can be sourced from a number of suppliers with different product codes and therefore different StockNumbers. "Identifier" is a code that is that the same for items that can be substituted. The customer needs to highlight the row that contained the first item where the identity changed. In the example below, ADR/10, ADR/2, ADR/9, ADR/17 needs to be highlighted. "StockNumber","Category","Number","Identity","Description" "ADR/10","ADR",10,"15X3T ","135MM..IDLER WITH SPRING & GREASE ADJ.." "ADR/11","ADR",11,"15X3T ","135MM X 39 LINK X 450 or 300 TB TRACK ASSY" "ADR/12","ADR",12,"15X3T ","BOTTOM ROLLERS SF" "ADR/2","ADR",2,"T750 ","IDLER ASSY INCLS SPRING & GREASE ADJ..<not use ..see ADR 3>" "ADR/3","ADR",3,"T750 ","IDLER ASSY INCLS SPRING & GREASE ADJ..IDL214" "ADR/4","ADR",4,"T750 ","101MM PITCH..TRACK GROUP..ALSO TAS 10..< cut to 250mm>" "ADR/16","ADR",16,"T750 ","27 x Link sect ..250mm TB Shoes" "ADR/9","ADR",9,"UB101Z0N42 250 ","TRACK..ADR9..TAS48 ..@ 42 LINK..250TB .. TRACK ASSY." "ADR/17","ADR",17,"UR101K123 ","ADS..MOD" It is possible to create a view based on the Stock table with sufficient data to determine the first row for each identity. Creating an CellUpdate event for the StockNumber cell allowed the StockNumber cell to be highlighted which is sufficient in this case. For example, procedure TfmADRStock.grStockNumberCellUpdate(Sender: TObject; ACell: TGridCell); var s: array of string; i1, i2: integer; begin esADRHeaders.InitFind; // view to determine when the change of identity occurs esADRHeaders.Columns['StockNumber'].AsString := ACell.Data; esADRHeaders.Find; if length(ACell.Data) > 0 then begin s := split(ACell.Data, '/'); i1 := esADRHeaders.Columns['H1'].AsInteger; // i1 is the stock number of the row where the change of identity occurs (the header row) i2 := StrToInt(s[1]); // i2 stock number of currenr row ACell.Font.Style.Bold := (i1 = i2); end; end; You could also change the background and font color. Richard |
Fri, Jul 5 2019 3:53 AM | Permanent Link |
Matthew Jones | Thanks - so still just a single cell? Strikes me that if it were possible to know/control the order of the drawing, you could use the first column and set a global to use in the subsequent columns of a row.
It isn't critical for me in this case, but I hope that this is answered in EWB3 - some way to access the current data row for the cell as it is updated/drawn. -- Matthew Jones |
Fri, Jul 5 2019 8:09 AM | Permanent Link |
Richard Harding Wise Nutrition Coaching | Matthew
Yes - it is still a single cell. The OnCellUpdate event is called many, many times. A couple points in case you wish to try it out. Firstly, the first group of OnCellUpdate events does not have ACell.Data defined so you need to check that ACellData is assigned. In the AfterLoad event for the lookup dataset, you need to add Grid1.DataSet.First. This will force another set of OnCellUpdate events that will perform the formatting. Otherwise, the cells will not be formatted until you scroll the items in the grid. Richard Attachments: ColoredGrid.jpg |
This web page was last updated on Wednesday, October 9, 2024 at 05:37 AM | Privacy PolicySite Map © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? E-mail us at info@elevatesoft.com |