Jump to content

DbGrid.ColumnByName


Stemon63

Recommended Posts

Hi Farshad,

please insert a DBgrid.ColumnByname or similar (ByFieldname).

I need to show or hide some columns at runtime, but only Idx is limited and difficult if visible column's number can be dynamic. 

Thanks in advance,

Stefano 

Link to comment
Share on other sites

  • 4 months later...
procedure TUniMainModule.ColumnVisible(Grid:TUniDBGrid;FieldName:String;visible:boolean);

var i:integer;

begin

   for I := 0 to grid.Columns.Count do

     begin

       if grid.Columns.FieldName=FieldName then

           begin

            grid.Columns.Visible :=Visible;

            break;

           end;

     end;

end;

 

 

use:

 

unimainmodule.ColumnVisible(grid1,'column',true);

  • Upvote 1
Link to comment
Share on other sites

You can easily extend the TuniDBGrid class as such and create your own component:

TMyUniDBGrid = class(TUniDBGrid)
public
  function ColumnByName(const pColumnName: string): TUniBaseDBGridColumn;
end;

function TMyUniDBGrid.ColumnByName(const pColumnName: string): TUniBaseDBGridColumn;
var i: integer;

begin
  for i := 0 to Columns.Count-1 do
  begin
    if Columns[i].FieldName = pColumnName then
    begin
      Result := Columns[i];
      Break;
    end;
  end;
  if (Result = nil) then
    raise Exception.Create('Column "' + pColumnName + '" does not exist!');
end;
Link to comment
Share on other sites

Even better:

TUniDBGridHelper = class helper for TUniDBGrid
public
  function ColumnByName(const pColumnName: string): TUniBaseDBGridColumn;
end;

function TUniDBGridHelper.ColumnByName(const pColumnName: string): TUniBaseDBGridColumn;
var i: integer;
begin
  for i := 0 to Columns.Count-1 do
  begin
    if Columns[i].FieldName = pColumnName then
    begin
      Result := Columns[i];
      Break;
    end;
  end;
  if (Result = nil) then
    raise Exception.Create('Column "' + pColumnName + '" does not exist!');
end;
  • Upvote 1
Link to comment
Share on other sites

×
×
  • Create New...