Autor Beitrag
dinazavric
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 05.05.11 13:29 
Hallo,

ich möchte den folgenden Code in einer Schleife ausführen, so, dass man bspw. bei 10 Controls nicht für jeden das Gleiche schreiben muss:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
if ((Px_Name.SelectedItem != null) || (Px_Value.SelectedItem != null))
{
   DataRow newRow2 = dataSetPro.Tables["Parameters"].NewRow();
   newRow2["ParameterName"] = Px_Name.Text.ToString();
   newRow2["ValueDefinition"] = Px_Value.Text.ToString();
   dataSetPro.Tables["Parameters"].Rows.Add(newRow2);
}


und zwar wird statt Px eben irgendwas zwischen P1 und P10 genommen. Wie kann ich es machen?
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Do 05.05.11 13:46 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  

 for (int i=0;i<10;i++)
{

   DataRow newRow2 = dataSetPro.Tables["Parameters"].NewRow();
   newRow2["ParameterName"] = Px_Name.Text.ToString(); 
   newRow2["ValueDefinition"] = Px_Value.Text.ToString();   
   dataSetPro.Tables["Parameters"].Rows.Add(newRow2);
}

wenn dann für px jeweils etwas anderes reinkommt nehm doch einen switch
dinazavric Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 05.05.11 14:10 
user profile icondark-destination1988 hat folgendes geschrieben Zum zitierten Posting springen:
wenn dann für px jeweils etwas anderes reinkommt nehm doch einen switch


dann muss ich ja beim switch 10 mal das gleiche schreiben... ich möchte ja dass die Px_Name und Px_Value irgendwie durchlaufen, irgendwie in der Art P[i]_Name und P[i]_Value für i=1..10
Ich weis nur leider nicht wie man es richtig macht...
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 05.05.11 14:33 
user profile icondinazavric hat folgendes geschrieben Zum zitierten Posting springen:

ich möchte ja dass die Px_Name und Px_Value irgendwie durchlaufen, irgendwie in der Art P[i]_Name und P[i]_Value für i=1..10


Du nennst deine Lösung hier quasi selbst.
Auf was kann man per Indexierung zugreifen?
Arrays, Listen oder ähnliches.

Also nicht Variablen P1_name, P2_name .. usw sondern ein array names auf das du mit dem index zugreifst.

Für diesen Beitrag haben gedankt: dinazavric
dinazavric Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Fr 06.05.11 09:55 
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Also nicht Variablen P1_name, P2_name .. usw sondern ein array names auf das du mit dem index zugreifst.


Erstens, danke für den Tipp. Ich habe gerade einen Link gefunden, wo das Thema etwas genauer erklärt wird:

msdn.microsoft.com/d...00%28v=vs.71%29.aspx

Trotzdem verstehe ich nicht wie so ein Array erstellt wird. Unter dem oben angegebenen Link wird von Steuerelementen gesprochen, die neu erstellt werden. In meinem Fall gibt es sie schon. In den Bespielen gibt es auch eine List[Index]. Ich habe da aber leider nicht gefunden wo sie her kommt. Könnte mir jemand da etwas weiter Helfen?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 06.05.11 10:48 
Wenn du schon die Steuerelemente im Designer erstellt hast, dann mußt du sie nochmal explizit auflisten:
ausblenden C#-Quelltext
1:
2:
3:
4:
Control[] controls; // als Membervariable

// in Konstruktor o.ä.
controls = new Control[] { P1_name, P2_name /*, ... */ };

(je nachdem um was es sich bei den Controls handelt, so kannst du anstatt 'Control' dann auch die Spezialisierung z.B. TextBox verwenden.)

Besser wäre jedoch, wenn du auch diese Controls dynamisch im Code anlegen würdest (ich nehme mal an, diese sind nach einem math. (geordneten) Prinzip angeordnet).

Für diesen Beitrag haben gedankt: dinazavric
dinazavric Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Fr 06.05.11 12:47 
Vielen Dank, jetzt habe ich es :-D:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
ComboBox[] NameControls, ValueControls;
NameControls= new ComboBox[] { P1_Name, P2_Name, P3_Name, P4_Name, P5_Name };
ValueControls= new ComboBox[] { P1_Value, P2_Value, P3_Value, P4_Value, P5_Value };

for (int i = 0; i < 5; i++)
{
   BindingSource bs = new BindingSource(); 
   bs.DataSource = this.dataSet2;
   NameControls[i].DisplayMember = "Parameters.ParameterName";
   NameControls[i].ValueMember = "Parameters.ParameterName";
   NameControls[i].DataSource = bs;
   ValueControls[i].DisplayMember = "Parameters.ParameterProperties.ValueDefinition";
   ValueControls[i].ValueMember = "Parameters.ParameterProperties.ParameterName";
   ValueControls[i].DataSource = bs;
}