2016-10-28 9 views
0

Ich habe eine Tabelle, die 3 Spalten hat und jede Spalte hat 5 Zeilen.Jetzt möchte ich diese Gesamtzahl von Zeilen in C#, um diese Anzahl von Etiketten dynamisch zu erstellen sowie die Zeilen zu erhalten Wert für Labels name.Similarly erstellt auch gleiche Nummern des Textfelds. Dann in der Laufzeit, ich wollte den Wert an die Datenbank von diesem Textfeld senden.Kann die Gesamtzahl der Zeilen nicht erhalten

Hinweis: hier, wenn ich die Zeilen der Tabelle vergrößern, dann werden die Label und Textbox automatisch/dynamisch erhöht, und das Senden von Wert über Textbox wird perfekt funktionieren.

Aber alles, was ich getan habe, ist nur Zählwert 1, ich habe gerade viel versucht, aber nicht den Gesamt-Zählwert, der eigentlich 5 ist.

hier ist mein Code ...

private void Form1_Load(object sender, EventArgs e) 
{ 
    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(cs)) 
    { 
     //string cmText = "select ProductId,ProductName,UnitPrice from tblProductInventory"; 
     string cmText = "Select Count(ProductId) from tblProductInventory"; 
     SqlCommand cmd = new SqlCommand(cmText, con); 
     con.Open(); 
     using (SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
      int count = rdr.FieldCount; 
      while (rdr.Read()) 
      { 
       //System.Windows.Forms.Label MyLabel; 
       { 
        int y = 50; 
        Label myLabel = new Label(); 
        for (int i = 0; i < count; i++) 
        { 
         myLabel = new Label(); 
         myLabel.Location = new Point(88, y); 
         myLabel.Name = "txtVWReadings" + i.ToString(); 
         myLabel.Size = new Size(173, 20); 
         myLabel.TabIndex = i; 
         myLabel.Visible = true; 
         myLabel.Text = rdr[i].ToString(); 
         y += 25; 
         this.Controls.Add(myLabel); 
        } 
       } 
      } 
     } 
    } 
} 

Und ich habe this output.

+0

ändern Sie meinen, Sie haben 1 Tabelle, in der Sie 3 Spalten und 5 Zeilen haben und Sie möchten, dass die Ausgabe 15 ist. Ist es ?? –

+0

nein, ich wollte, dass die Ausgabe 5 Etiketten und 5 Textfelder sein wird. –

Antwort

1

Das Problem scheint, dass Sie Abfrage als Anzahl verwenden, aber Sie möchten die Werte des Feldes. So können Sie es wahrscheinlich zu

string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 
using (SqlConnection con = new SqlConnection(cs)) 
{ 
    //string cmText = "select ProductId,ProductName,UnitPrice from tblProductInventory"; 
    string cmText = "Select Count(ProductId) from tblProductInventory"; 
    SqlCommand cmd = new SqlCommand(cmText, con); 
    con.Open(); 
    Int32 count = (Int32) cmd.ExecuteScalar(); 
    int i = 1; 
    cmText = "select ProductId,ProductName,UnitPrice from tblProductInventory"; 
    SqlCommand cmd1 = new SqlCommand(cmText, con); 
    using (SqlDataReader rdr = cmd1.ExecuteReader()) 
    { 
     int y = 50; 
     Label myLabel = new Label(); 
     TextBox MyTxt = New TextBox(); 

     while (rdr.Read()) 
     { 
      myLabel = new Label(); 
      myLabel.Location = new Point(88, y); 
      myLabel.Name = "txtVWReadings" + i.ToString(); 
      myLabel.Size = new Size(173, 20); 
      myLabel.TabIndex = i; 
      myLabel.Visible = true; 
      myLabel.Text = rdr[1].ToString(); //Since you want ProductName here 
      y += 25; 
      this.Controls.Add(myLabel); 

      //Same Way Just include the TextBox 
      //After all Position of TextBox 
      MyTxt.Text = rdr[2].ToString(); // I believe you need UnitPrice of the ProductName 
      i++; 
     } 
    } 
} 
+0

'System.IndexOutOfRangeException' aufgetreten bei myLabel.Text = rdr [1] .ToString(); –

+0

es ist die gleiche Sache bro ich habe es nur für das Label überprüft. @Mohit Shrivastava –

+0

Nein, ich habe versucht, mit Ihrem Bearbeitungsbereich zu laufen, aber ... nur für Etiketten, als ich den Code veröffentlicht. Also, es gab nur einen Befehl und ich benutzte cmd.ExecuteReader. –

1

Count(columname): Zählt nur die NOT NULL Werte in dieser Spalte.

Count(*): Zählt die Anzahl der Datensätze in dieser Tabelle.

Also ich denke, Sie haben einige Werte in ProductId Spalte. Ändern Sie den Wert in

+0

Ich habe es jetzt überprüft. Aber nichts hat sich geändert, ich habe die gleiche Ausgabe. –

+0

@BlueeandRed - Wenn Ihre Tabelle 5 Zeilen hat, dann wird 'Count (*)' ** ** in jedem Fall ** 5 zurückgeben. Was Sie sagen, ist nicht möglich. Fügen Sie Ihrer Abfrage Filter hinzu? –

+0

Es gibt 5 in SQL Server Management Studio zurück, aber in Code bleibt es gleich. –

Verwandte Themen