Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: So 23.10.16 13:53 
Hallo, ich hänge gerade bei der folgenden Sache fest.

Ich habe ein DataRow-Objekt, welches aus der 2 Tabellen zusammengebastellt ist. Dieser sieht exemplarisch folgendermaßen aus:

Kunden-Name, Kunden-Vorname, Kunden-Ort, Kunden-Strasse usw.

Ich möchte die ersten 2 Elemente in ein String-Array packen und die restlichen 2 Elemente in einen anderen String-Array.
Dann soll der zum nächsten DataRow-Objekt springen. Am Ende habe ich dann 2 String-Arrays mit Kunden-Name und Kunden-Vorname + Kunden-Ort und Kunden Strasse.

Hab schon was ausprobiert aber er springt dabei noch nicht zur nächsten DataRow. Ich wollte wissen wie es am einfachsten zu lösen ist. Ich weiss ich könnte statt dem Array die List nehmen aber so ist er erstmal einfacher für mich.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
string[] KundenArr = new string[2];

foreach (DataRow dr in tbl.Select())
{
    object[] obArray = dr.ItemArray;
    KundenArr[0] += obArray[0];
    KundenArr[1] += obArray[1];
}
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 23.10.16 14:08 
Was du schreibst hat nichts mit dem gezeigten Code zu tun. Was ist näher an der Wahrheit?

Dein Code erzeugt ein Array nicht zwei. Und der Code packt alle Daten einer Spalte deines Datatable(tbl ist doch eine DataTable?) als ein langen string ohne irgendeinen Trenner an die entsprechende Stelle in dem einen Array. KundenArray hat also zwei strings. Index 0 enthält alle Daten von Spalte 0, Index 1 alle Daten von Spalte 2 alle anderen Daten in der DataTable bleiben unberührt.

Gefühlt macht es keinen Sinn die Daten zu so zu trennen. Am besten erklärst du nicht nur genauer was du willst sondern auch warum ;)
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: So 23.10.16 16:46 
Ich möchte am Ende zwei Arrays haben, aber erst muss ich einen richtig befüllen.

Hab ich unklar ausgedrückt. Mein SQL-Befehl den ich mit dem command ausführe, vereinigt 2 Tabellen mit einem Join. Und ich möchte die wieder durch mein vorhaben wieder voneinander trennen. Hört sich unsinnig an aber ich muss das machen :D

Beispiel wie es aussehen soll:

Array_1
ausblenden C#-Quelltext
1:
2:
3:
Array_1[0] = Merkel, Angela
Array_1[1] = Obama, Barrack
Array_1[2] = Muster, Max

Array_2
ausblenden C#-Quelltext
1:
2:
3:
Array_2[0] = Berlin, Berliner Straße
Array_2[1] = Washington, Washingtonstr.
Array_2[2] = Musterhausen, Musterstrasse

Nun will ich sagen können listview1.Items.Add(Array_1 + Array2). Damit ich die schön in der gleichen Reihe aneinanderpackt.

Also:

Die Zeilen in der listview1 sollen also dann so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
ColumnHeader1| ColumnHeader2     | ColumnHeader3  | ColumnsHeader 4
---------------------------------------------------------------------
Merkel       | Angela            | Berlin         | Berliner Straße
Obama        | Barrack           | Washinton      | Washingtonstr.
Mustermann   | Max               | Musterhausen   | Musterstrasse

Also die einzelnen Werte in den Items des Arrays müssen auch getrennt gespeichert werden. Ich weiss nicht ob das möglich ist, oder ob man da einen 2D-Array dafür braucht.

Bitte versuche nicht den Sinn dahinter zu verstehen :)

Moderiert von user profile iconTh69: C#- und Code-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 23.10.16 17:14 
Zitat:
Bitte versuche nicht den Sinn dahinter zu verstehen :)


Doch. Wenn du willst darfst du das als den Preis für meine Hilfe verstehen.

Dein Erklärung macht die gesamte Sache noch unverständlicher. Ich sehe keinen Grund da was zu trennen und warum das ein Array sein soll. Es gibt viele Datenstrukturen die Daten in Listenform im Speicher halten. Eine DataTable wäre eine, Array eine andere. Es gibt aber noch viele andere und ein Array ist normalerweise so ziemlich die letzte Datenstruktur die man haben will. Gerade wenn man den Inhalt des/der Array(s) nicht stärker typisieren will.

Machen wir es mal anders herum wenn du deine Daten einfach in ein ListView verschieben willst und keine Ansprüche an eine funktionierende Datenstruktur dahinter stellst. Was spricht gegen ein

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
foreach (DataRow row in tbl.Rows)
{
    ListViewItem listitem = new ListViewItem(row [0].ToString());
    listitem.SubItems.Add(row [1].ToString());
    listitem.SubItems.Add(row [2].ToString());
    listitem.SubItems.Add(row [3].ToString());
    listView1.Items.Add(listitem);
}
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: So 23.10.16 20:18 
Also gut. In einer Windows-Form soll der User Kunden filtern können. Universell, nach plz, usw. Ausgegeben wird das in einer ListView.

Folgendes ist gegeben.

Eine Kunden-Klasse:

ausblenden volle Höhe C#-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:
public class Kunde
    {
        private string[] data = new string[47];

        public Kunde(DataRow originalData) 
        {
            data = new string[originalData.ItemArray.Length];
            for (int i = 0; i < originalData.ItemArray.Length; i++) {
                data[i] = originalData.ItemArray[i].ToString();
            }
        }

        public string[] Row 
        {
            get { return data; }
        }

        public override string ToString()
        {
            return suchbegriff;
        }
        
        public string kunden_zaehler {
            get { return data[0]; }
            set { data[0] = value; }
        }
        public string kunden_nr {
            get { return data[2]; }
            set { data[2] = value; }
        }
        public string suchbegriff {
            get { return data[3]; }
            set { data[3] = value; }
        }
        public string kunden_name {
            get { return data[4]; }
            set { data[4] = value; }
        }
.
.
.


Eine Klasse Ansprechpartner:
ausblenden volle Höhe C#-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:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
public class Ansprechpartner {
        private string[] data = new string[11];


        public Ansprechpartner()
        {
        }
        public Ansprechpartner(DataRow originalData) {
            data = new string[originalData.ItemArray.Length];
            for (int i = 0; i < originalData.ItemArray.Length; i++) {
                data[i] = originalData.ItemArray[i].ToString();
            }
        }

        public Ansprechpartner(string[] newData) {
            this.data = newData;
        }

        public string[] Row {
            get { return data; }
        }

        public string IDZaehler {
            get { return data[0]; }
            set { data[0] = value; }
        }

        public string KundenNr {
            get { return data[1]; }
            set { data[1] = value; }
        }

        public string AnsprechpartnerName {
            get { return data[2]; }
            set { data[2] = value; }
        }

        public string TelefonDurchwahl {
            get { return data[3]; }
            set { data[3] = value; }
        }

        public string Bemerkungen {
            get { return data[4]; }
            set { data[4] = value; }
        }

        public string dtmAnlage {
            get { return data[5]; }
            set { data[5] = value; }
        }
.
.
.


Die Methode die aufgerufen wird iwann:

ausblenden volle Höhe C#-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:
private void LadeAlleKunden(string sUniversell, string sName, string sPlz, string sOrt, string sSuchbegriff, string sTelefonFax, string sAnsprechpartner, string sKundenNr, Mandant mandant)
        {
            
            lblGefunden.Text = string.Empty;
            Cursor.Current = Cursors.WaitCursor;
            listViewErwSuche.Clear();
            listViewErwSuche.Columns.Add("KundenNr"80);
            listViewErwSuche.Columns.Add("Suchbegriff"125);
            listViewErwSuche.Columns.Add("Name I"125);
            listViewErwSuche.Columns.Add("Name II"125);
            listViewErwSuche.Columns.Add("Anrede"120);
            listViewErwSuche.Columns.Add("Ansprechpartner"120);
            listViewErwSuche.Columns.Add("Straße"120);
            listViewErwSuche.Columns.Add("PLZ"80);
            listViewErwSuche.Columns.Add("Ort"100);
            listViewErwSuche.Columns.Add("Telefon"120);
            listViewErwSuche.Columns.Add("Telefon II"120);
            listViewErwSuche.Columns.Add("Fax"120);
            listViewErwSuche.Columns.Add("Suchbegriffe"250);
            textBoxSuchbegriff.Enabled = true;
            if (KeineTextBoxIstLeer())

                foreach (SQLHandlerBase.Suchergebnis suchergebnis in handler.AlleKundenFilter(sUniversell, sName, sPlz, sOrt, sSuchbegriff, sTelefonFax, sAnsprechpartner, sKundenNr, mandant))
                {

                    ListViewItem ListItem = new ListViewItem(new string[] {suchergebnis.kunde.kunden_name, suchergebnis.kunde.Kunden_Zaehlerm suchergebnis.ansprechpartner.ansprechpartnerName});
                    ListItem.Tag = suchergebnis;
                    listViewErwSuche.Items.Add(ListItem);
                }
            lblGefunden.Text = "Gefundene Datensätze: " + listViewErwSuche.Items.Count.ToString();
        }
    
    private void ShowSuchergebnis()
        {
            if (radioButtonNachKunden.Checked)
            {
                 LadeAlleKunden(textBoxUniversell.Text, textBoxName.Text, textBoxPLZ.Text, textBoxOrt.Text, textBoxSuchbegriff.Text, textBoxTele.Text, textBoxAnsprechpartner.Text, textBoxKundenNummer.Text, cboxZugehoerigkeit.SelectedItem as Mandant);
            }
    }


Hier werden die Parameter empfangen und in SQL-Befehle umgewandelt:

ausblenden volle Höhe C#-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:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
public List<Suchergebnis> AlleKundenFilter(string sUniversell, string sName, string sPlz, string sOrt, string sSuchbegriff, string sTelefonFax, string sAnsprechpartner, string sKundenNr, Mandant mandant)
        {

            List<Suchergebnis> Ergebnis = new List<Suchergebnis>();
            bool error = false;
            bool need_and = false;
            do
            {
                try
                {
                    cmd.CommandText = "SELECT tblKunden.*, tblAnsprechpartner.* From tblKunden LEFT JOIN tblAnsprechpartner ON tblAnsprechpartner.[Kunden-Nr] = tblKunden.[Kunden-Nr] ";
                    //cmd.CommandText = "SELECT * FROM tblKunden WHERE ";
                    if (sUniversell != string.Empty)
                        cmd.CommandText += "(Suchbegriff LIKE '%" + sUniversell + "%' OR [Kunden-Name] LIKE '%" + sUniversell + "%' OR [Kunden-Name2] LIKE '%" + sUniversell + "%' OR Straße LIKE '%" + sUniversell + "%' OR PLZ LIKE '%" + sUniversell + "%' OR Ort LIKE '%" + sUniversell + "%' OR Telefon LIKE '%" + sUniversell + "%' OR Telefon2 LIKE '%" + sUniversell + "%' or TeleFAX LIKE '%" + sUniversell + "%' OR [Kunden-Nr] LIKE '%" + sUniversell + "%') AND [Lösch-KZ] = 0";
                           
                    else
                    {
                        if (sName != string.Empty)
                        {
                            cmd.CommandText += "[Kunden-Name] LIKE '%" + sName + "%' OR [Kunden-Name2] LIKE '%" + sName + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }

                        if (sPlz != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "PLZ LIKE '%" + sPlz + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (sOrt != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "ORT LIKE '%" + sOrt + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (sSuchbegriff != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "Suchbegriff LIKE '%" + sSuchbegriff + "%' OR strSuchBegriffe LIKE '%" + sSuchbegriff + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (sTelefonFax != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "Telefon LIKE '%" + sTelefonFax + "%' OR TeleFax LIKE '%" + sTelefonFax + "%' OR Telefon2 LIKE '%" + sTelefonFax + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (sAnsprechpartner != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "Partner LIKE '%" + sAnsprechpartner + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (sKundenNr != string.Empty)
                        {
                            if (need_and) cmd.CommandText += "AND ";
                            cmd.CommandText += "[Kunden-Nr] LIKE '%" + sKundenNr + "%' AND [Lösch-KZ] = 0";
                            need_and = true;
                        }
                        if (mandant != null)
                        {
                            if (mandant.autoID != string.Empty)
                            {
                                if (need_and) cmd.CommandText += "AND ";
                                cmd.CommandText += "lngMandant = " + mandant.autoID + " AND [Lösch-KZ] = 0";
                                need_and = true;
                            }
                        }
                    }

                    DataSet dsK = new DataSet();
                    SqlDataAdapter daK = new SqlDataAdapter(cmd);
                    daK.Fill(dsK, "tblKunden");
                    DataTable tbl = dsK.Tables["tblKunden"];
                   
                    
                    foreach (DataRow dr in tbl.Select())
                    {
                        //Hier komme ich nicht weiter
                    }
                        
                        
                }
                catch (Exception ex)
                {
                    switch (MessageBox.Show("Die Tabelle tblKunden konnte nicht gelesen werden.""Fehler", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error))
                    {
                        case DialogResult.Retry:
                            error = true;
                            break;
                        case DialogResult.Cancel:
                            error = false;
                            break;
                    }
                }
            } while (error);
            return Ergebnis;
        }


Wenn ich nur in der Tabelle Kunden filtern würde, könnte die Public List <Kunden> (vom Typ Kunden) sein und ich bräuchte dort nur diese For-Schleife, damit ich die Kunden habe:

ausblenden C#-Quelltext
1:
2:
foreach (DataRow dr in tbl.Select())
Kunde.Add(new Kunde(dr));


Da ich die Tabelle Ansprechpartner joine brauche ich noch diese Klasse:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public class Suchergebnis
        {
            public Kunde kunde;
            public Ansprechpartner ansprechpartner;
        }


Um dann später die ListView folgendermaßen zu füllen.

ausblenden C#-Quelltext
1:
2:
3:
ListViewItem ListItem = new ListViewItem(new string[] {suchergebnis.kunde.kunden_name, suchergebnis.kunde.Kunden_Zaehlerm suchergebnis.ansprechpartner.ansprechpartnerName});
                    ListItem.Tag = suchergebnis;
                    listViewErwSuche.Items.Add(ListItem);


Und nur darum gehts. Ich möchte auf die Felder der Klasse Kunden UND der Klasse Ansprechpartner zugreifen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 23.10.16 20:50 
Etwa so bekommst du deine Daten in eine List<Suchergebnis>.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var Ergebnis = tbl.AsEnumerable().Select(x => new Suchergebnis()
{
    ansprechpartner = new Ansprechpartner() { AnsprechpartnerName = x[0].ToString(), Bemerkungen = x[1].ToString() /*usw.*/ },
    kunde = new Kunde() { kunden_name = x[2].ToString(), kunden_nr = x[3].ToString() /*usw.*/ }
}).ToList();


Über dein Datenmodell solltest du aber nochmal scharf nachdenken. Von Indizes in Abfragen mit * abzuhängen und alles in strings zu speichern sollte dir eigentlich eher früher als später um die Ohren fliegen.
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: So 23.10.16 21:33 
Danke, ich probiere das morgen mal aus.

Kannst du mir ein konkretes Beispiel nennen, wo sowas um die Ohren fliegt?

Das Ding ist, ich hab nur c# 2.0
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 23.10.16 21:38 
Füge einfach nur eine neue Spalte in irgendeiner Tabelle hinzu.

Wie findest du garantiert alle Codestellen die geändert werden müssen?
Der Compiler wird dir nicht helfen. Das Programm wird laufen. Da alles den gleichen Datentyp hat wird nicht mal ein merkwürdige Exception kommen wenn du alles mal zum Test durchklickst.
Daten werden einfach nur in der falschen Spalte unter falschem Namen auftauchen. Das kann man übersehen.

Insofern ist der Ausdruck "um die Ohren fliegen" wohl eher missverständlich. Du riskierst eher das es dir nicht um die Ohren fliegt wenn was falsch läuft sondern Fehler sich unbemerkt einschleichen und dauerhafter unbemerkt überleben.
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Mo 24.10.16 08:23 
Okay da hast du Recht aber noch ist das Programm nicht so umfangreich und wie gesagt, ich habe ich nur das .NET Framework 2.0, damit kann ich Linq und Lambda-Ausdrücke nicht benutzen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 24.10.16 09:47 
Lambda-Ausdrücke sind unabhängig von dem zu verwendeten Framework, sondern nur ein Compiler-Feature (d.h. ab C# 3.0 verfügbar: >= VS 2008).
Und Linq kann man für .NET 2.0 mittels LINQ for .NET 2.0 verwenden.
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Mo 24.10.16 18:31 
@Th69, wir dürfen nichts nachinstallieren und Lambda geht wohl wirklich nicht. Das ist C# aus 2005.

Es funktioniert nun so wie ich will. Hier die Lösung:

Der SQL-Befehl musste ein wenig angepasst werden:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if (sUniversell != string.Empty)
                    {
                        //Filter Kunde
                        cmd.CommandText += " tblKunden.Suchbegriff LIKE '%"+sUniversell+"%' OR tblKunden.[Kunden-Name] LIKE '%"+sUniversell+"%' OR tblKunden.[Kunden-Name2] LIKE '%"+sUniversell+"%' OR tblKunden.Straße LIKE '%"+sUniversell+"%' OR tblKunden.PLZ LIKE '%"+sUniversell+"%' OR tblKunden.Ort LIKE '%"+sUniversell+"%' ";
                        cmd.CommandText += " OR tblKunden.Telefon LIKE '%"+sUniversell+"%' OR tblKunden.Telefon2 LIKE '%"+sUniversell+"%' or tblKunden.TeleFAX LIKE '%"+sUniversell+"%' OR tblKunden.strSuchBegriffe LIKE '%"+sUniversell+"%' OR tblKunden.[Kunden-Nr] LIKE '%"+sUniversell+"%' OR tblKunden.Telefon LIKE '%"+sUniversell+"%' ";
                        cmd.CommandText += " OR tblKunden.Telefon2 LIKE '%"+sUniversell+"%' ";

                        //Filter Ansprechpartner
                        cmd.CommandText += " OR tblAnsprechpartner.Ansprechpartner LIKE '%"+sUniversell+"%' OR tblAnsprechpartner.[Telefon-Durchwahl] LIKE '%"+sUniversell+"%' OR tblAnsprechpartner.[Telefon-Durchwahl] LIKE '%"+sUniversell+"%'";
.
.
.


Das ist aus der Foreach-Schleife geworden. Statt dem DataRow übergebe ich die Arrays:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
foreach (DataRow dr in tbl.Select())
                    {
                        //59 Alle spalten
                        //47 Kunden
                        //12 Asprechpartner
                        string[] kundenArr = new string[47];
                        string[] ansprechpartnerArr = new string[12];

                        for (int i = 0; i < dr.ItemArray.Length - 1; i++)
                        {
                            if (i < 47)
                            {
                                kundenArr[i] = dr.ItemArray[i].ToString();
                            }
                            else
                            {
                                ansprechpartnerArr[i-47] = dr.ItemArray[i].ToString();
                            }
                        }                            

                        Ergebnis.Add(new Suchergebnis(new Kunde(kundenArr), new Ansprechpartner(ansprechpartnerArr)));
                    }


Der Konstruktor der Klasse Kunde nimmt nun einen stringArray entgegen:

ausblenden C#-Quelltext
1:
2:
3:
4:
public Kunde(string[] newData)
        {
            this.data = newData;
        }


Nun kann ich in der Methode auf, sozusagen "zwei" Tabellen zugreifen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
foreach (Suchergebnis suchergebnis in handler.AlleKundenFilter(sUniversell, sName, sPlz, sOrt, sSuchbegriff, sTelefonFax, sAnsprechpartner, sKundenNr, mandant))
                {
                    ListViewItem ListItem = new ListViewItem(new string[] {suchergebnis.kunde.kunden_nr, suchergebnis.kunde.suchbegriff, suchergebnis.kunde.kunden_name, suchergebnis.kunde.kunden_name2, suchergebnis.ansprechpartner.AnsprechpartnerName, suchergebnis.ansprechpartner.TelefonDurchwahl, suchergebnis.kunde.strasse, suchergebnis.kunde.plz, suchergebnis.kunde.ort, suchergebnis.kunde.telefon, suchergebnis.kunde.telefon2, suchergebnis.ansprechpartner.strFax, suchergebnis.kunde.strsuchbegriffe});
                    ListItem.Tag = suchergebnis;
                    listViewErwSuche.Items.Add(ListItem);
                }