Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Prism Steuerelemente für eine Tabelle erstellen (https://www.delphipraxis.net/58473-steuerelemente-fuer-eine-tabelle-erstellen.html)

Taladan 7. Dez 2005 15:44


Steuerelemente für eine Tabelle erstellen
 
Ich habe mir ein paar Nächte um die Ohren geschlagen um eine Navigationsleiste für Delphi Datasets zu erstellen. Es handelt sich um eine UserControl. Diese muß während der Laufzeit (am besten im Load-Event) noch mit einen DataSet und mit einer Tabelle verbunden werden.

Delphi-Quellcode:
procedure Winform1.FTalente_Load(sender: System.Object; e: System.EventArgs);
begin
  //Hier ist die Navigation bereits auf der Form gesetzt worden
  Navigation.BindingBase(MyDataSet, 'MeineTabellenNameAlsString');
end;


Delphi-Quellcode:
unit CNavigation;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data, System.Resources;

type
  Navigation = class(System.Windows.Forms.UserControl)
  {$REGION 'Vom Designer verwalteter Code'}
  strict private
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    components: System.ComponentModel.IContainer;
    btnFirst: System.Windows.Forms.Button;
    btnPrior: System.Windows.Forms.Button;
    btnNext: System.Windows.Forms.Button;
    btnLast: System.Windows.Forms.Button;
    Buttons: System.Windows.Forms.ImageList;
    btnNew: System.Windows.Forms.Button;
    btnDelete: System.Windows.Forms.Button;
    btnSave: System.Windows.Forms.Button;
    TextBox1: System.Windows.Forms.TextBox;
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers -
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure InitializeComponent;
    procedure btnFirst_Click(sender: System.Object; e: System.EventArgs);
    procedure btnPrior_Click(sender: System.Object; e: System.EventArgs);
    procedure btnNext_Click(sender: System.Object; e: System.EventArgs);
    procedure btnLast_Click(sender: System.Object; e: System.EventArgs);
    procedure btnDelete_Click(sender: System.Object; e: System.EventArgs);
    procedure btnNew_Click(sender: System.Object; e: System.EventArgs);
    procedure btnSave_Click(sender: System.Object; e: System.EventArgs);
    procedure TextBox1_Enter(sender: System.Object; e: System.EventArgs);
    procedure TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs);
    procedure TextBox1_TextChanged(sender: System.Object; e: System.EventArgs);
    procedure TextBox1_Leave(sender: System.Object; e: System.EventArgs);
    procedure TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs);
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Ressourcen nach der Verwendung bereinigen
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private-Deklarationen }
    myBindingManagerBase : BindingManagerBase;
    ICurrentPosition : Integer;
    MyTable : String;
    MyDataSet : DataSet;
    Changing : boolean;
    procedure BindingManagerBase_CurrentChanged(sender: System.Object; e: System.EventArgs);
    procedure BindingManagerBase_PositionChanged(sender: System.Object; e: System.EventArgs);
    procedure write_Position(pos:integer);
    procedure finde_Datensatz(pos: integer);
  public
    constructor Create;
    procedure BindingBase(aDataSet : Dataset; aTable : String);
  published
    property Position : integer read ICurrentPosition write write_Position;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(TNavigation))]

implementation

uses
  System.Globalization;

{$AUTOBOX ON}

{$REGION 'Vom Windows Form-Designer erzeugter Code'}
/// <summary>
/// Erforderliche Methode zur Unterstützung des Designers --
/// ändern Sie die Methode nicht mit dem Quelltext-Editor
/// </summary>
procedure TNavigation.InitializeComponent;
var
  resources: System.Resources.ResourceManager;
begin
  Self.components := System.ComponentModel.Container.Create;
  resources := System.Resources.ResourceManager.Create(TypeOf(TNavigation));
  Self.btnFirst := System.Windows.Forms.Button.Create;
  Self.Buttons := System.Windows.Forms.ImageList.Create(Self.components);
  Self.btnPrior := System.Windows.Forms.Button.Create;
  Self.btnNext := System.Windows.Forms.Button.Create;
  Self.btnLast := System.Windows.Forms.Button.Create;
  Self.btnDelete := System.Windows.Forms.Button.Create;
  Self.TextBox1 := System.Windows.Forms.TextBox.Create;
  Self.btnNew := System.Windows.Forms.Button.Create;
  Self.btnSave := System.Windows.Forms.Button.Create;
  Self.SuspendLayout;
  // 
  // btnFirst
  // 
  Self.btnFirst.ImageIndex := 0;
  Self.btnFirst.ImageList := Self.Buttons;
  Self.btnFirst.Location := System.Drawing.Point.Create(1, 1);
  Self.btnFirst.Name := 'btnFirst';
  Self.btnFirst.Size := System.Drawing.Size.Create(40, 23);
  Self.btnFirst.TabIndex := 0;
  Include(Self.btnFirst.Click, Self.btnFirst_Click);
  // 
  // Buttons
  // 
  Self.Buttons.ColorDepth := System.Windows.Forms.ColorDepth.Depth16Bit;
  Self.Buttons.ImageSize := System.Drawing.Size.Create(16, 16);
  Self.Buttons.ImageStream := (System.Windows.Forms.ImageListStreamer(resources.GetObject('B' +
    'uttons.ImageStream')));
  Self.Buttons.TransparentColor := System.Drawing.Color.FromArgb((Byte(254)),
      (Byte(0)), (Byte(254)));
  // 
  // btnPrior
  // 
  Self.btnPrior.ImageIndex := 1;
  Self.btnPrior.ImageList := Self.Buttons;
  Self.btnPrior.Location := System.Drawing.Point.Create(40, 1);
  Self.btnPrior.Name := 'btnPrior';
  Self.btnPrior.Size := System.Drawing.Size.Create(40, 23);
  Self.btnPrior.TabIndex := 1;
  Include(Self.btnPrior.Click, Self.btnPrior_Click);
  // 
  // btnNext
  // 
  Self.btnNext.ImageIndex := 2;
  Self.btnNext.ImageList := Self.Buttons;
  Self.btnNext.Location := System.Drawing.Point.Create(152, 1);
  Self.btnNext.Name := 'btnNext';
  Self.btnNext.Size := System.Drawing.Size.Create(40, 23);
  Self.btnNext.TabIndex := 2;
  Include(Self.btnNext.Click, Self.btnNext_Click);
  // 
  // btnLast
  // 
  Self.btnLast.ImageIndex := 3;
  Self.btnLast.ImageList := Self.Buttons;
  Self.btnLast.Location := System.Drawing.Point.Create(191, 1);
  Self.btnLast.Name := 'btnLast';
  Self.btnLast.Size := System.Drawing.Size.Create(40, 23);
  Self.btnLast.TabIndex := 3;
  Include(Self.btnLast.Click, Self.btnLast_Click);
  // 
  // btnDelete
  // 
  Self.btnDelete.ImageIndex := 4;
  Self.btnDelete.ImageList := Self.Buttons;
  Self.btnDelete.Location := System.Drawing.Point.Create(230, 1);
  Self.btnDelete.Name := 'btnDelete';
  Self.btnDelete.Size := System.Drawing.Size.Create(40, 23);
  Self.btnDelete.TabIndex := 6;
  Include(Self.btnDelete.Click, Self.btnDelete_Click);
  // 
  // TextBox1
  // 
  Self.TextBox1.Font := System.Drawing.Font.Create('Microsoft Sans Serif', 10.25,
      System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (Byte(0)));
  Self.TextBox1.Location := System.Drawing.Point.Create(78, 0);
  Self.TextBox1.Name := 'TextBox1';
  Self.TextBox1.Size := System.Drawing.Size.Create(75, 23);
  Self.TextBox1.TabIndex := 8;
  Self.TextBox1.Text := 'TextBox1';
  Self.TextBox1.TextAlign := System.Windows.Forms.HorizontalAlignment.Right;
  Include(Self.TextBox1.KeyDown, Self.TextBox1_KeyDown);
  Include(Self.TextBox1.KeyPress, Self.TextBox1_KeyPress);
  Include(Self.TextBox1.TextChanged, Self.TextBox1_TextChanged);
  Include(Self.TextBox1.Leave, Self.TextBox1_Leave);
  Include(Self.TextBox1.Enter, Self.TextBox1_Enter);
  // 
  // btnNew
  // 
  Self.btnNew.ImageIndex := 5;
  Self.btnNew.ImageList := Self.Buttons;
  Self.btnNew.Location := System.Drawing.Point.Create(269, 1);
  Self.btnNew.Name := 'btnNew';
  Self.btnNew.Size := System.Drawing.Size.Create(40, 23);
  Self.btnNew.TabIndex := 9;
  Include(Self.btnNew.Click, Self.btnNew_Click);
  // 
  // btnSave
  // 
  Self.btnSave.ImageIndex := 6;
  Self.btnSave.ImageList := Self.Buttons;
  Self.btnSave.Location := System.Drawing.Point.Create(308, 1);
  Self.btnSave.Name := 'btnSave';
  Self.btnSave.Size := System.Drawing.Size.Create(40, 23);
  Self.btnSave.TabIndex := 10;
  Include(Self.btnSave.Click, Self.btnSave_Click);
  // 
  // TNavigation
  // 
  Self.Controls.Add(Self.btnSave);
  Self.Controls.Add(Self.btnNew);
  Self.Controls.Add(Self.TextBox1);
  Self.Controls.Add(Self.btnDelete);
  Self.Controls.Add(Self.btnLast);
  Self.Controls.Add(Self.btnNext);
  Self.Controls.Add(Self.btnPrior);
  Self.Controls.Add(Self.btnFirst);
  Self.Name := 'TNavigation';
  Self.Size := System.Drawing.Size.Create(349, 24);
  Self.ResumeLayout(False);
end;
{$ENDREGION}

constructor TNavigation.Create;
begin
  inherited Create;
  //
  // Erforderlich für die Unterstützung des Windows Forms-Designers
  //
  InitializeComponent;
  changing := false;
  //
    //
end;

procedure TNavigation.btnLast_Click(sender: System.Object; e: System.EventArgs);
begin
   myBindingManagerBase.Position := myBindingManagerBase.Count - 1;
end;

procedure TNavigation.btnNext_Click(sender: System.Object; e: System.EventArgs);
begin
   myBindingManagerBase.Position := myBindingManagerBase.Position + 1;
end;

procedure TNavigation.btnPrior_Click(sender: System.Object; e: System.EventArgs);
begin
   myBindingManagerBase.Position := myBindingManagerBase.Position -1;
end;

procedure TNavigation.btnFirst_Click(sender: System.Object; e: System.EventArgs);
begin
   myBindingManagerBase.Position :=  0;;
end;

procedure TNavigation.BindingBase(aDataSet : Dataset; aTable : String);
begin
  MyTable := aTable;
  MyDataSet := aDataSet;
  myBindingManagerBase := Self.BindingContext[aDataSet, aTable];
  Include(myBindingManagerBase.PositionChanged, BindingManagerBase_PositionChanged);
  Include(myBindingManagerBase.CurrentChanged, BindingManagerBase_CurrentChanged);
  self.Position := 0;
end;

procedure TNavigation.TextBox1_KeyDown(sender: System.Object; e: System.Windows.Forms.KeyEventArgs);
begin
  try
    convert.toint32(Textbox1.Text);
  except
    Textbox1.Text := '';
  end;
end;

procedure TNavigation.TextBox1_Leave(sender: System.Object; e: System.EventArgs);
begin
   changing := false;
end;

procedure TNavigation.TextBox1_TextChanged(sender: System.Object; e: System.EventArgs);
var i, i1 : integer;
begin
  if changing = true then begin
    if textbox1.text <> '' then begin
      i := convert.ToInt32(Textbox1.Text);
      if i > (myBindingManagerBase.Count) then begin
        textbox1.Text := MyBindingManagerbase.Count.ToString;
      end else if i < 1 then begin
        Textbox1.Text := '1';
      end;
    end;
  end;
end;

procedure TNavigation.TextBox1_KeyPress(sender: System.Object; e: System.Windows.Forms.KeyPressEventArgs);
begin
  if not( e.KeyChar in ['0'..'9']) then begin
    if e.KeyChar = #13 then begin
       finde_Datensatz(convert.ToInt32(Textbox1.Text)-1);
    end;
    e.Handled := true;
  end;
end;

procedure TNavigation.TextBox1_Enter(sender: System.Object; e: System.EventArgs);
begin
  Textbox1.Text := '';
  changing := true;
end;

procedure TNavigation.btnSave_Click(sender: System.Object; e: System.EventArgs);
begin
//  Hier die Speicherprocedure
end;

procedure TNavigation.btnNew_Click(sender: System.Object; e: System.EventArgs);
begin
  MyDataSet.Tables[MyTable].Rows.Add(MyDataSet.Tables[MyTable].NewRow);
  MyDataSet.AcceptChanges;
end;

procedure TNavigation.btnDelete_Click(sender: System.Object; e: System.EventArgs);
begin
  self.MyDataSet.Tables[MyTable].Rows.RemoveAt(myBindingManagerBase.Position);
end;

procedure TNavigation.finde_Datensatz(pos: integer);
begin
  myBindingManagerBase.Position := pos;
end;

procedure TNavigation.BindingManagerBase_PositionChanged(sender: System.Object; e: System.EventArgs);
begin
  position := BindingManagerBase(sender).Position;
end;

procedure TNavigation.BindingManagerBase_CurrentChanged(sender: System.Object; e: System.EventArgs);
begin
  position := BindingManagerBase(sender).Position;
end;

procedure TNavigation.write_Position(pos : Integer);
var i, i1 : integer;
begin
  ICurrentPosition := pos;
  if (position = 0) then begin
     btnfirst.Enabled := false;
     btnprior.Enabled := false;
     btnnext.Enabled := true;
     btnlast.Enabled := true;
  end else if (position = (myBindingManagerBase.Count - 1)) then begin
     btnfirst.Enabled := true;
     btnprior.Enabled := true;
     btnnext.Enabled := false;
     btnlast.Enabled := false;
  end else begin
     btnfirst.Enabled := true;
     btnprior.Enabled := true;
     btnnext.Enabled := true;
     btnlast.Enabled := true;
  end;
  if myBindingManagerBase <> nil then begin
    i := myBindingManagerBase.Count;
    i1 := ICurrentposition+1;
    textbox1.Text := i1.ToString + ' von ' + i.tostring;
  end;
end;

procedure TNavigation.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

end.
Edit: Es handelt sich um 7 Buttons und ein Textfeld. Die 7 Buttons übernehmen die Aufgaben des Navigierens Vor, Zurück, Erster und Letzter Datensatz, sowie löschen und einfügen. Der Button Save muß je nach Zugriff noch umgeschrieben werden.
Edit2: Das Textfeld wird zur direkten Datensatz-Navigation verwendet. Wobei es bei .Net keinen Datensatzzeiger gibt. Für direkte Edits aus den Program gibt es die Eigenschaft Position zum auslesen. Das Textfeld mag nur Zahlen.

CalganX 9. Dez 2005 18:46

Re: Steuerelemente für eine Tabelle erstellen
 
Hi,
in deinem Fall fände ich es besser, wenn du das ganze als Assembly verpacken würdest und es dann als OpenSource-Control in der OpenSource-Sparte vorstellen würdest. Ich denke da wäre dein Control etwas besser aufgehoben. ;)

Chris

DP-Maintenance 11. Mär 2006 10:24

DP-Maintenance
 
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Eher was für die OpenSource-Sparte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz