2017-03-07 5 views
-1

In meinem Code habe ich eine Methode für jede Taste als ein Beispiel, ich habe Huhn und Rindfleisch Tasten und sie haben ihre eigenen Methoden, wenn ich zum ersten Mal auf die Hühnertaste klicken Das geladene Formular wird in der Listbox angezeigt, aber wenn ich nach dem Hühnchen auf den Button "Beef" klicke, wird mir eine System.ArgumentException angezeigt. Wie würde das behoben werden?System.Data.DataRowView wie kann ich es lösen

private void Chicken() 
{ 
    using (connection = new SqlConnection(connectionString)) 
     using (SqlDataAdapter adapter = new SqlDataAdapter("select Chicken_Name,WithOrWithout_Name,Chicken_Price from Tbl_Add a full outer join tbl_Chicken b ON b.Chicken_ID = a.Chicken_ID full outer join Tbl_WithORWithot c ON a.WorWO_ID = c.WithOrWothout_ID ; ", connection)) 
     { 
      DataTable tbl_Chicken = new DataTable(); 
      adapter.Fill(tbl_Chicken); 

      lst_SHowdata.DisplayMember = "Chicken_Name"; 
      lstSHowdata2.DisplayMember = "Chicken_Price"; 

      lst_SHowdata.ValueMember = "Chicken_ID"; 
      lst_SHowdata.ValueMember = "Beef_ID"; 

      lst_SHowdata.DataSource = tbl_Chicken; 
      lstSHowdata2.DataSource = tbl_Chicken; 
     } 
} 

private void Beef() 
{ 
    using (connection = new SqlConnection(connectionString)) 
     using (SqlDataAdapter adapter = new SqlDataAdapter("select Beef_Name,WithOrWithout_Name ,Beef_Price from Tbl_Add a full outer join Tbl_Beef b ON b.Beef_ID = a.Beef_ID full outer join Tbl_WithORWithot c ON a.WorWO_ID = c.WithOrWothout_ID ; ", connection)) 
     { 
      DataTable tbl_Beef = new DataTable(); 
      adapter.Fill(tbl_Beef); 

      lst_SHowdata.DisplayMember = "Beef_Name"; 
      lstSHowdata2.DisplayMember = "Beef_Price"; 

      lst_SHowdata.ValueMember = "Beef_ID"; 
      lst_SHowdata.ValueMember = "Chicken_ID"; 

      lst_SHowdata.DataSource = tbl_Beef; 
      lstSHowdata2.DataSource = tbl_Beef; 
     }  
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Chicken(); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    Beef(); 
} 

Und ich versuchte, es zu beheben, indem Sie einen Kommentar für die Linien zu machen, die die Ausnahme

//lst_SHowdata.ValueMember = "Chicken_ID"; 
// lst_SHowdata.ValueMember = "Beef_ID"; 

und irgendwie fixiert worden war, machen aber ich muss die Taste zweimal klicken, wenn ich es für das Klicken Zum ersten Mal wird es in der Listbox angezeigt System.Data.DataRowView. wie es zu beheben und es nur im ersten Klick angezeigt werden?

+0

"es mir eine System.ArgumentException zeigen" <--- jede Nachricht mit, dass gehen zusammen? –

+0

Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentException' ist in System.Windows.Forms.dll aufgetreten Weitere Informationen: Kann nicht an den neuen Wert Mitglied gebunden werden. –

+0

das ist die Nachricht, die es mir zeigt, wenn die Ausnahme gezeigt –

Antwort

0

Korrigieren Sie mich, wenn ich falsch liege. So verstehen Sie es. Sie versuchen, beim Klicken auf die Schaltfläche Daten an die Listbox zu binden. Sie haben 2 Listenfeldsteuerelemente zum Binden.

Zuerst die Datenquelle zuweisen, bevor die Mitglieder zugewiesen werden. Es kann nicht gebunden werden, da ihm noch keine Datenquelle zugewiesen wurde.

private void Chicken() 
    { 
      using (connection = new SqlConnection(connectionString)) 
      using (SqlDataAdapter adapter = new SqlDataAdapter("select Chicken_Name,WithOrWithout_Name,Chicken_Price from Tbl_Add a full outer join tbl_Chicken b ON b.Chicken_ID = a.Chicken_ID full outer join Tbl_WithORWithot c ON a.WorWO_ID = c.WithOrWothout_ID ; ", connection)) 
     { 
      DataTable tbl_Chicken = new DataTable(); 
      connection.Open(); //opens the connection 
      adapter.Fill(tbl_Chicken); 
      connection.Close(); //Closes the connection 

      lst_SHowdata.DataSource = tbl_Chicken; //assigns a datasource 
      lst_SHowdata.DisplayMember = "Chicken_Name"; //assigns display 
      lst_SHowdata.ValueMember = "Chicken_ID"; //assigns id 


      lst_SHowdata2.DataSource = tbl_Chicken; 
      lst_SHowdata2.DisplayMember ="Chicken_Price"; 
      lst_SHowdata2.ValueMember = "Chicken_ID"; 

     } 
    } 

    private void Beef() 
    { 
    using (connection = new SqlConnection(connectionString)) 
    using (SqlDataAdapter adapter = new SqlDataAdapter("select Beef_Name,WithOrWithout_Name ,Beef_Price from Tbl_Add a full outer join Tbl_Beef b ON b.Beef_ID = a.Beef_ID full outer join Tbl_WithORWithout c ON a.WorWO_ID = c.WithOrWothout_ID ; ", connection)) 
     { 
     DataTable tbl_Beef = new DataTable(); 
     connection.Open(); 
     adapter.Fill(tbl_Beef); 
     connection.Close(); 

     lst_SHowdata.DataSource = tbl_Beef 
     lst_SHowdata.DisplayMember = "Beef_Name"; 
     lst_SHowdata.ValueMember = "Beef_ID"; 

     lst_SHowdata2.DataSource = tbl_Beef; 
     lst_SHowdata2.ValueMember = "Beef_ID"; 
     lst_SHowdata2.DisplayMember = "Beef_Price"; 
    }  
} 
+0

danke sorry für die späte Wiedergabe, ist die DataBind in C#, denn wenn ich den Code dataBind einfügen nicht identifiziert! Danke, ich habe versucht, es zu lösen, aber ich konnte nicht –

+0

Es ist in C#. Es ist jedoch möglicherweise nicht in der Kontrolle. Entschuldigung, ich habe an ListView gedacht. Sie brauchen die Daten nicht wirklich. Können Sie die Datenbindzeilen kommentieren? und versuchen, es auszuführen? – jmag

+0

Ich habe den Code aktualisiert. Seit Databind() ist für ASP-Steuerelemente und nicht in Forms vorhanden. Tut mir leid, ich hätte das vor dem Posten bestätigen sollen. Aber meine Antwort bleibt die gleiche ohne die Linie. DataSource gehen zuerst, dann die Mitglieder zuweisen. – jmag

0

Sie erhalten den Fehler, weil, wenn Sie versuchen, den ValueMember auf "Bee_Name" zu setzen, die Liste an tbl_chicken gebunden ist, die keinen Beef_Name enthält und sich somit - richtig - beschwert.

Um dies zu umgehen, setzen Sie die Datenquellen auf tbl_beef und legen Sie dann den ValueMember fest.

0

Der Fehler liegt daran, dass das valueMember "Beef_ID" und "Chicken_ID" ist. Diese sind in der Datentabelle nicht verfügbar. Sie müssen es in "Beef_Name" ändern oder die "Beef_ID" in die sql select-Anweisung aufnehmen. Auch für das gleiche Listenfeld setzen Sie zwei verschiedene Wert Mitglieder.

0

der richtige Code ^^ es

private void Chicken() 
    { 
     using (connection = new SqlConnection(connectionString)) 
     using (SqlDataAdapter adapter = new SqlDataAdapter("select * from Tbl_Add a full outer join tbl_Chicken b ON b.Chicken_ID = a.Chicken_ID full outer join Tbl_WithORWithot c ON a.WorWO_ID = c.WithOrWothout_ID ; ", connection)) 
     { 
      DataTable tbl_Chicken = new DataTable(); 
      connection.Open(); //opens the connection 
      adapter.Fill(tbl_Chicken); 
      connection.Close(); //Closes the connection 

      lst_Menu.DataSource = tbl_Chicken; //assigns a datasource 
      lst_Menu.DisplayMember = "Chicken_Name"; //assigns display 
      lst_Menu.ValueMember = "Chicken_Name"; 

      lst_worwout.DataSource = tbl_Chicken; 
      lst_worwout.DisplayMember = "WithOrWithout_Name"; 
      lst_worwout.ValueMember = "WithOrWithout_Name"; 

      lst_Price.DataSource = tbl_Chicken; 
      lst_Price.DisplayMember = "Chicken_Price"; 
      lst_Price.ValueMember = "Chicken_Price"; 


     } 
    } 
Verwandte Themen