Autor Beitrag
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 09.09.05 20:08 
Hallo,

ich habe ein C# Programm programmiert (#develop), dass per Intervallschachtelung die Quadratwurzel einer natürlichen Zahl annähert. Ich möchte jetzt, die Daten die ich ausgeben will (Intervall, Intervalllänge, Nährungswert, Probe) in einer Tabelle anordnen.
Wie mache ich das am einfachsten?

Das Zeuch in C# kennt das Wort Tabelle anscheinend nur in Verbindung mit Datenbank :roll: mit der mein Prog aber nix zu tun hat.

Da ich vorher noch nicht mit Grids gearbeitet habe, bitte ich auch im Codebeispiele.

Schonmal Danke im vorraus
JayK


Moderiert von user profile iconraziel: Topic aus .NET verschoben am Sa 17.09.2005 um 22:07


Zuletzt bearbeitet von JayK am Sa 10.09.05 11:34, insgesamt 1-mal bearbeitet
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 10.09.05 11:20 
Als Tabellen-Kompo hab ich nur DataGrid gefunden und das brauch ein DataSource. Über die Hilfe bin ich dann auf DataTable gestoßen, aber damit komm ich irgendwie nicht zurecht. :(
Pls Help!
Marauder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72



BeitragVerfasst: Sa 10.09.05 19:13 
Im Grunde ist das ganz einfach. Unter .NET kann jede Komponente an fast alles gebunden werden.
In deinem Fall kommt aber ein Array nicht in Frage. DU hast zwei Möglichkeiten:

1. Eine eigene Klasse, dass folgende Beispiel ist für Delphi, sollte aber einfach umzusetzen sein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
type rDat = class
    private
       iID      : System.Int32;
       bAktiv   : System.Boolean;
       sVorname : System.&String;
       sName    : System.&String;
    procedure wID(ID:System.int32);
    function  rID():System.int32;
    procedure wAktiv(Aktiv:System.Boolean);
    function  rAktiv():System.Boolean;
    procedure wVN(Vorname:System.String);
    function  rVN():System.String;
    procedure wNa(Name:System.String);
    function  rNa():System.String;

    constructor create (ID:System.int32;Aktiv:System.boolean;Vorname:System.String;Name:System.String);

    published
       property ID : System.Int32 read rID write wID;
       property Aktiv : System.Boolean read rAktiv write wAktiv;
       property Vorname : System.&String read rVN write wVN;
       property Name : System.&String read rNa write wNa;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// Klassenmethoden rDat
procedure rDat.wID(ID:System.int32);         begin; iID := ID; end;
function  rDat.rID():System.int32;           begin; Result := iID; end;
procedure rDat.wAktiv(Aktiv:System.Boolean); begin; bAktiv := Aktiv end;
function  rDat.rAktiv():System.Boolean;      begin; Result := bAktiv; end;
procedure rDat.wVN(Vorname:System.String);   begin; sVorname := Vorname end;
function  rDat.rVN():System.String;          begin; Result := sVorname; end;
procedure rDat.wNa(Name:System.String);      begin; sName := Name end;
function  rDat.rNa():System.String;          begin; Result := sName; end;

Constructor rDat.Create (ID:System.int32;Aktiv:System.boolean;Vorname:System.String;Name:System.String);
   begin;
     inherited Create;
     iID := ID; bAktiv := Aktiv; sVorname := Vorname;sName := Name;
   end;
// Klassenmethoden Ende


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);
var aDaten : ArrayList;

begin
    // Grid leeren
    DataGrid1.DataSource := NIL;
    DataGrid1.CaptionText := 'DataGrid mit Arraylist';
    DataGrid1.GridLineStyle := DataGridLineStyle.Solid ; // oder NONE


    // Spalten zu Arraykist zufügen
    // (Die Klasse rDat represäntiert die Spalten)

    aDaten := Arraylist.Create;
    aDaten.Add(rDat.create (1,false,'Hansi','Hase'));
    aDaten.Add(rDat.create (2,true ,'Tilo' ,'Tester'));
    aDaten.Add(rDat.create (3,true ,'Karl' ,'Krötentöter'));
    aDaten.Add(rDat.create (4,false,'Peter','Pan'));
    DataGrid1.DataSource := aDaten;

    // Combo
    // Combo leeren
    combobox1.DataSource := NIL;
    combobox1.DisplayMember := NIL;
    combobox1.ValueMember := NIL;
    combobox1.items.Clear;
    // Combo befüllen
    combobox1.DataSource := aDaten;
    combobox1.DisplayMember := 'Name';
    combobox1.ValueMember :='ID';

    // ListBox
    Listbox1.DataSource := NIL;
    Listbox1.DisplayMember := NIL;
    Listbox1.ValueMember := NIL;
    Listbox1.Items.Clear;
    // Listbox befüllen
    Listbox1.DataSource := aDaten;
    Listbox1.DisplayMember := 'Name';
    Listbox1.ValueMember :='ID';
end;



Das zweite Beispiel ist mit einer DataTable:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);
var dt : DataTable;
    rw : DataRow;
    dv : DataView;                 
    a : integer;
begin
    // Grid leeren
    DataGrid1.DataSource := NIL;
    DataGrid1.CaptionText := 'DataGrid mit DataView';
    DataGrid1.GridLineStyle := DataGridLineStyle.Solid ; // oder NONE


    // Spalten zu Datatable zufügen
    dt := datatable.Create;
    dt.Columns.Add ('ID', System.Type.GetType('System.Int32'));
    dt.Columns.Add('(String 1)', System.Type.GetType('System.String'));
    dt.Columns.Add('(String 2)', System.Type.GetType('System.String'));
    dt.Columns.Add('(Double)', System.Type.GetType('System.Double'));
    dt.Columns.Add('(Integer)', System.Type.GetType('System.Int64'));

    // Datatable befüllen
    for a := 0 to 50 do
      begin
        rw := dt.NewRow  ;
        rw.Item ['ID'] := a;
        rw.Item ['(String 1)'] :=  'Spalte 1 ' + a.ToString ;
        rw.Item ['(String 2)'] :=  'Spalte 2 ' + a.ToString ;
        rw.Item ['(Double)'] :=   a / 0.3 ;
        rw.Item ['(Integer)'] :=  a * 123 ;
        dt.Rows.Add(rw);
      end;

    // DataView aus DataTable erzeugen
    dv := DataView.Create (dt);
    // Grid mit DataView befüllen
    DataGrid1.DataSource := dv;


end;


Die Beispiele stammen übrigens aus meinem Buch, ist schon im Vorverkauf, kommt ab Oktober:
"Delphi goes .NET"

:wink:

Schleichwerbung ist bestimmt verboten, gell? :D
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 10.09.05 22:11 
user profile iconMarauder hat folgendes geschrieben:
Das zweite Beispiel ist mit einer DataTable:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TWinForm.TWinForm_Load(sender: System.Object; e: System.EventArgs);
var dt : DataTable;
    rw : DataRow;
    dv : DataView;                 
    a : integer;
begin
    // ...
    // Datatable befüllen
    for a := 0 to 50 do
      begin
        rw := dt.NewRow  ;
        rw.Item ['ID'] := a;
        rw.Item ['(String 1)'] :=  'Spalte 1 ' + a.ToString ;
        //...

Hmm. Bei mir hat System.Data.DataRow keine Eigenschaft Item :? höchstens ItemArray.

user profile iconMarauder hat folgendes geschrieben:
Die Beispiele stammen übrigens aus meinem Buch, ist schon im Vorverkauf, kommt ab Oktober:
"Delphi goes .NET"

:shock: Du bist Buchautor? Geil. ;)

user profile iconMarauder hat folgendes geschrieben:
Schleichwerbung ist bestimmt verboten, gell? :D

Ja freilich! :mrgreen:
Marauder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72



BeitragVerfasst: So 11.09.05 01:18 
.NET Version? Meins ist die 1.1 mit ServicePacks... :wink:

Ausserdem... glaub nicht alles was die IDE's Dir sagen, Delphi zeigt oft nicht das an, was
man erwartet, funktioniert aber trotzdem, wenn man es ausprobiert.
Teilweise zeigt es sogar Fehler, wo gar keine sind, zum Beispiel bei Arrays und equal, da steht
dann FEHLER! VERKEHRT! GEHT NICHT! (Frei übersetzt) -läuft aber trotzdem alles.

Also wenn du auch 1.1 verwendest, sollte auf jeden Fall DataRow vorhanden sein... :D

Zitat:
Du bist Buchautor? Geil.


Ja, und Ende des Jahres gibt's das Datenbankkompendium von mir, alles was Ihr noch nie
über die 6 wichtigsten Datenbanken wissen wolltet...
Also "Delphi goes Databases" da ist dann alles drin, wie man Sie einrichtet, anspricht und verwendet.
Ntürlich auch solche Sachen wie Datenbindungen, Datenbanken anbinden ohne sie zu binden, etc...
Fang ich im Oktober an.
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: So 11.09.05 19:27 
user profile iconMarauder hat folgendes geschrieben:
.NET Version? Meins ist die 1.1 mit ServicePacks... :wink:

Ich hab auch 1.1 mit dt. Lng-Pack.

user profile iconMarauder hat folgendes geschrieben:
Ausserdem... glaub nicht alles was die IDE's Dir sagen, Delphi zeigt oft nicht das an, was man erwartet, funktioniert aber trotzdem, wenn man es ausprobiert.

Ich benutzte aber #develop :tongue:
Und es lässt sich ja nicht kompilieren. (C# --> Microsofts C#-Compiler csc.exe) :-(

C#-Compiler hat folgendes geschrieben:
'System.Data.DataRow' enthält keine Definition für 'Item'(CS0117)



user profile iconMarauder hat folgendes geschrieben:

Also wenn du auch 1.1 verwendest, sollte auf jeden Fall DataRow vorhanden sein... :D

DataRow ist ja auch da.
Aber die Eigenschaft/wasweißich DataRow.Item gibts bei mir nicht.
Marauder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72



BeitragVerfasst: So 11.09.05 22:47 
Ja, das scheint bei C# etwas anders zu sein... in der MSDN steht's so drin:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    DataTable myTable;
    myTable = MakeNamesTable();
    // Once a table has been created, use the NewRow to create a DataRow.
    DataRow myRow;
    myRow = myTable.NewRow();
    // Then add the new row to the collection.
    myRow["fName"] = "John";
    myRow["lName"] = "Smith";
    myTable.Rows.Add(myRow);


Anscheinend geht man nur bei Delphi über die Item-Auflistung... :wink:
Wobei.. bei C# macht man ja eigentlich auch nichts anderes, man schreibt nur das "item" nicht...

Moderiert von user profile iconraziel: Code- durch C#-Tags ersetzt
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mo 12.09.05 17:33 
Danke jetzt klappt es. :D

PS. viel Erfolg mit deinem Buch ;-)
Marauder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72



BeitragVerfasst: Mo 12.09.05 17:37 
Na also... :wink: