2017-01-19 1 views
0

Ich habe Formular, das textbox für Produkt-ID hat, wenn Benutzer eine Produkt-ID eingeben Ich erhalte Details des Produkts (wie PRODUCT_DESC, UNIT_PRICE, usw.) von Orakel-Datenbank und dann füllen es in datagridview Liste der gekauften Produkt zu erstellenLesen von Daten für Orakel-Leser zum Füllen von Datagridview

I-Datensatz zu laden versucht, aber das ist die alte Eintrag entfernen, wenn neue Produkt-ID hinzufügen

ich Schleife versucht, auf dataset und Extraktwerte ich möchte, und fügen sie dann zu ihre Spalte in datagridview die Schleife hier ist nutzlos, da es nur einen Datensatz gibt, aber die Daten nicht laden auf t er datagridview

bitte wie es geht ??

und gibt es einen besseren Weg, das zu tun?

private void SelectedProductData() 
    { 
     string connstr = @"Data Source=orcl; User Id=user; password=pwd;"; 
     string cmdtxt = @"SELECT PRODUCT_ID, 
           PRODUCT_DESC, 
           UNIT_PRICE, 
           QUANTITY, 
           MEASUREMENT_UNIT, 
           MANUFACTORY 
          FROM WAREHOUSE 
          WHERE PRODUCT_ID = :P_Product_ID"; 

     using (OracleConnection conn = new OracleConnection(connstr)) 
     using (OracleCommand cmd = new OracleCommand(cmdtxt, conn)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = cmdtxt; 

      cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Int32)).Value = TB_Product_ID.Text; 

      conn.Open(); 
      OracleDataReader oraReader = cmd.ExecuteReader(); 

      DataTable dt = new DataTable(); 
      dt.Load(oraReader); 

      while (oraReader.Read()) 
      { 
       DGV_INVOICE.CurrentCell.Value = oraReader.GetString(0); 
      } 
      //foreach (DataRow dr in dt.Rows) 
      //{ 
      // DGV_INVOICE.Rows[0].Cells[0].Value = dt.Rows[0]["PRODUCT_ID"].ToString(); 
      //} 
     } 
    } 

-Code-Update

private void TB_Product_ID_Leave(object sender, EventArgs e) 
{ 
    SelectedProductData(); 
} 

Methode

private void SelectedProductData() 
{ 
    string connstr = @"Data Source=JDT; User Id=admin; password=admin;"; 
    string cmdtxt = @"SELECT PRODUCT_ID, 
          PRODUCT_DESC, 
          UNIT_PRICE, 
          QUANTITY, 
          MEASUREMENT_UNIT, 
          MANUFACTORY 
         FROM WAREHOUSE 
         WHERE PRODUCT_ID = :P_Product_ID"; 

    using (OracleConnection conn = new OracleConnection(connstr)) 
    using (OracleCommand cmd = new OracleCommand(cmdtxt, conn)) 
    { 
     conn.Open(); 

     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = cmdtxt; 

     cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Int32)).Value = TB_Product_ID.Text; 

     OracleDataReader oraReader = cmd.ExecuteReader(); 

     DataTable dt = new DataTable(); 

     dt.Load(oraReader); 

     while (oraReader.Read()) 
     { 
      DataGridViewRow dgvRow = new DataGridViewRow(); 
      dgvRow.Cells[0].Value = oraReader.GetValue(2); 
      //dgvRow.Cells[0].Value = oraReader.GetString(2); 
      //dgvRow.Cells[0].Value = oraReader.GetString(3); 
      //dgvRow.Cells[0].Value = oraReader.GetString(4); 

      DGV_INVOICE.Rows.Add(dgvRow); 
     } 
     MessageBox.Show("done"); 
    } 
} 
+0

@JohnG Ich habe die Datenquelle nicht auf DataGridView First gesetzt 1. weil ich Spalte manuell erstellt habe und ich Zeilen aus der Datenbank füllen und jeden Spaltenwert in die Spalte einfügen möchte ... weil zwischen diesen Spalten gibt es Berechnungsspalten, die gemäß den Daten berechnet werden, die ich aus der Datenbank wie der Gesamtpreis erhalte, werden gemäß dem Einheitspreiswert aus der Datenbank multipliziert mit der Einheitseinheit berechnet .... und so weiter. Sekunde 2. wenn ich lade der DataGridView, der den vorher eingegebenen Eintrag entfernt und den neuen Eintrag lädt ... sorry für mein schlechtes Englisch .Hoffe es ist jetzt klar – sam

+0

@JohnG Ich habe ein Bild hochgeladen, um die Dinge klarer zu machen Ich werde die Daten nicht zweimal von neuem lesen Datenbank Ich lese Daten Ich möchte es in eine bestimmte Spalte in 'DataGridView' einfügen, die w krank Mittagessen ein Ereignis auf "DataGridView", die Spalte Gesamtpreis berechnen wird, wenn ich den Datensatz laden, wie ich suche und im Netz, die vorherige Datensatz löschen und den neuen Datensatz laden ... Beispiel Ich habe Produkt 1 mit Preis 1000 eingegeben und benannte test1, wenn ein Benutzer ein neues Produkt anfordert, das keinen anderen Datensatz in 'DataGridView' lädt, der einen neuen Datensatz in' DataGridView' lädt und alten löscht – sam

+0

@JohnG Ja Das Bild zeigt, was der Benutzer sieht und das Bild aktualisiert, um die Gesamtpreisspalte und anzuzeigen Spalte 1.2.3 kommt aus der Datenbank nach Produkt-ID Benutzer geben Nummer 123 sind wo jeder sollte es laden sollte es nicht laden als zusätzliche Spalte am Ende der DataGridView Spalten, die ich gemacht habe, wenn ich den Datensatz wie 1 in laden Spalte 1 und 2 in Spalte 2 zu Ihrer Rechten nicht wie jetzt gezeigt ...Lesemarken sind, dass Spalte 1 multipliziert mit Spalte 2 minus Spalte 3 Daten in Spalte Gesamtpreis ergibt, die die Berechnungsspalte ist, sprach ich über – sam

Antwort

1

Ich glaube, Sie korrekte Umsetzung der, wie man hinzufügen neue Zeile in die Datagridview haben müssen.

Sobald die Daten im Leser verfügbar sind, können Sie die folgende Logik verwenden, um eine neue Zeile hinzuzufügen und die Spaltenwerte für die Datagridview festzulegen.

Hier wird die while-Schleife nur einmal ausgeführt, da der Leser Daten für nur einen proudct hat. Dies erstellt jedoch eine neue Zeile in der Datagrid-Ansicht und legt die Werte der Spalten fest.

+0

Vielen Dank für Ihre Hilfe und das sieht aus wie ich will, aber ich bekomme Fehler Operation ist nicht gültig aufgrund des aktuellen Zustands des Objekts. Ich überprüfe den Bearbeitungsmodus für DataGridView und seine EditProgrammatically und alle Spalten lesen NICHT Nur Spalten ... alles andere zu überprüfen? – sam

+0

Bei welcher Zeile erhalten Sie diesen Fehler? Rufen Sie die Methode "SelectedProductData" beim Klicken auf die Schaltfläche auf? –

+0

ja Ich rufe 'SelectedProductData' auf Knopf klicken und ich bekomme Fehler bei' while (oraReader.Read()) ' – sam

Verwandte Themen