AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Prism Steuerelemente für eine Tabelle erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Steuerelemente für eine Tabelle erstellen

Ein Thema von Taladan · begonnen am 7. Dez 2005 · letzter Beitrag vom 11. Mär 2006
Antwort Antwort
Benutzerbild von Taladan
Taladan
Registriert seit: 5. Aug 2003
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.
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
 
CalganX

 
Turbo Delphi für Win32
 
#2
  Alt 9. Dez 2005, 18:46
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
  Mit Zitat antworten Zitat
11. Mär 2006, 10:24
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Eher was für die OpenSource-Sparte.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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