2016-06-13 14 views
0

In meiner Windows Forms-Anwendung versuche ich, ein Listenfeld mit Werten aus einem Dataset zu füllen. Es bleibt jedoch leer und enthält keine Ausnahmen.Verwenden eines Datasets zum Füllen von Listenfeldern

Dies ist mein Code

 private void FormTeams_load(object sender, EventArgs e) 
    { 

     try 
     { 

      DBTeams = new DBConnection(); 
      conString = Properties.Settings.Default.UserConnectionString; 
      DBTeams.connection_string = conString; 

      DBTeams.Sql = Properties.Settings.Default.SQL_Teams; 

      ds = DBTeams.GetConnection; 

      MaxRows = ds.Tables[0].Rows.Count; 

      lsb_TeamsTeams.DataSource = ds; 
      lsb_TeamsTeams.DisplayMember = "team_name"; 
      lsb_TeamsTeams.ValueMember = "team_ID"; 

     } 
     catch (Exception err) 
     { 

      MessageBox.Show(err.Message); 

     } 

    } 

Listbox Name ist "lsb_TeamsTeams", Datensatz Name ist "ds". Die Tabelle enthält 3 Spalten. Ich möchte Spalte "team_ID" und "team_name" in dieser ListBox angezeigt werden.

Okay, nur um zu versuchen, wenn meine Abfrage in meiner ersten Form, Form1 angezeigt würde, versuchte ich Folgendes. Hier versuche ich einen zweiten Datensatz mit meiner zweiten Tabelle in der Datenbank zu füllen und versuche dann, die Daten an eine ListBox zu übergeben.

 private void Form1_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      secondForm = new FormTeams(); 

      DBPlayers = new DBConnection(); 
      conString = Properties.Settings.Default.UserConnectionString; 
      DBPlayers.connection_string = conString; 

      DBPlayers.Sql = Properties.Settings.Default.SQL_Players; 
      ds = DBPlayers.GetConnection; 

      DBPlayers.Sql = Properties.Settings.Default.SQL_Teams; 
      ds2 = DBPlayer.GetConnection; 

      lsb_Teams.DisplayMember = "team_name"; 
      lsb_Teams.ValueMember = "team_ID"; 
      lsb_Teams.DataSource = ds2; 


      MaxRows = ds.Tables[0].Rows.Count; 

      NavigateRecords(); 

      btn_Save.Enabled = false; 
      btn_New.Enabled = true; 
      btn_Cancel.Enabled = false; 

     } 
     catch (Exception err) 
     { 

      MessageBox.Show(err.Message); 

     } 
    } 

Dies führt leider diesen Fehler: Invalid object name 'tbl_Teams'.

Ich verstehe nicht ganz, warum es diesen Fehler auslösen würde, ich habe versucht, das Problem auf Google zu suchen, aber ich konnte nur einige Kommentare über Auffrischung intellisense Cache finden. Ich habe versucht, dies in Visual Studio 2015 Enterprise zu finden, konnte es aber nicht.

Hier ist die Datenbank-Verbindungsmethoden, die ich verwende.

 public System.Data.DataSet GetConnection 
    { 

     get { return MyDataSet(); } 

    } 

    private System.Data.DataSet MyDataSet() 
    { 

     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon); 
     con.Open(); 
     da_0 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con); 
     System.Data.DataSet dat_set = new System.Data.DataSet(); 
     da_0.Fill(dat_set, "Table_Data_1"); 

     con.Close(); 

     return dat_set; 

    } 

Also bei dem Versuch, die Datenbank über SQL Server Management Studio zuzugreifen, fand ich die Tabelle I in Visual Studio erstellt, in der Datenbank nicht vorhanden war, was erklärt, warum ich den Fehler bekam Invalid object name 'table' Wie kann das sein ? Ich glaube, es hat etwas damit zu tun, dass ich die zweite Tabelle über Visual Studio erstellt habe. Irgendwie hat es es in den Visual Studio Server Explorer hinzugefügt, aber nicht in die eigentliche Datenbank. Bei Verwendung von SQL Management Studio konnte ich die zweite Tabelle erstellen und dann würde meine Abfrage in C# funktionieren.

Aber jetzt ist das nächste Problem mit dem Füllen der ListBox angekommen.

Ich kann keine Daten in meiner ListBox anzeigen, aber ich kann Daten in einem DataGridView anzeigen, aber ich möchte es in einer ListBox anzeigen.

Mein Code:

 private void Form1_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      secondForm = new FormTeams(); 

      DBPlayers = new DBConnection(); 
      conString = Properties.Settings.Default.UserConnectionString; 
      DBPlayers.connection_string = conString; 

      DBPlayers.Sql = Properties.Settings.Default.SQL_Players; 
      ds = DBPlayers.GetConnection; 

      DBPlayers.Sql = Properties.Settings.Default.SQL_Teams; 
      ds2 = DBPlayers.GetConnection; 

      //The following lines of code diplay: " System.Data.DataViewManagerList Item TypeDescriptor " in the ListBox. 
      lsb_Teams.DisplayMember = "team_name"; 
      lsb_Teams.ValueMember = "team_ID"; 
      lsb_Teams.DataSource = ds2.Tables[0]; 

      //This works, it displays the data from the table. 
      dataGridView1.DataSource = ds2.Tables[0]; 


      MaxRows = ds.Tables[0].Rows.Count; 

      NavigateRecords(); 

      btn_Save.Enabled = false; 
      btn_New.Enabled = true; 
      btn_Cancel.Enabled = false; 

     } 
     catch (Exception err) 
     { 

      MessageBox.Show(err.Message); 

     } 
    } 

ich mehrere Positionen der .DataSource Linie versucht haben, aber das hat nicht geholfen. Ich habe auch versucht, die Daten von meinem anderen Dataset ds.tables [0] in die ListBox zu stellen und dann Daten aus der DisplayMember-Spalte anzuzeigen, aber beim Start der Anwendung einen Fehler ausgegeben cannot bind to the new value member. Parameter name: value.

Antwort

0

können Sie verwenden:

lsb_TeamsTeams.DataSource = ds.Tables[0]; 

und Überprüfen Sie, ob ds.Tables[0] Daten enthält.

müssen Sie auch zweite Abfrage ändern DBPlayers.Sql, um Daten aus tbl_Teams Tabelle zu erhalten:

DBPlayers.Sql = Properties.Settings.Default.SQL_Players; 
ds2 = DBPlayer.GetConnection; 

, weil Sie die gleiche Abfrage von Spielern verwenden seconde DataSet

+0

Vergessen zu erwähnen, dass ich das schon probiert habe. Bleibt noch leer. Aber danke. – Dennis1679

+0

Was ist der Wert von 'MaxRows', sind Sie sicher, dass Sie Daten in' ds.Tables [0] 'haben? –

+0

MaxRows wird auf die Zeilenanzahl von Tabellen [0] gesetzt. In diesem Fall 2. Aber das ist nicht wirklich wichtig, da ich diesen Code aus einem anderen Teil meiner Anwendung wieder verwendet habe und momentan benutze ich MaxRows noch nicht (noch). – Dennis1679

1

prüfen zu füllen, um zu sehen, ob Ihre Datenmengen Tabellen bevölkert (mit Codepausen). Sie müssen einen DataAdapter verwenden, um den Datensatz zu füllen, und ich glaube nicht, dass Sie das tun.Bitte posten Sie auch Ihre SQL-Abfrage, wenn dies Ihnen nicht hilft.

+1

verwenden Danke! Dieser Code Break Tipp war sehr nützlich. Ich habe herausgefunden, dass meine Abfrage nicht einmal ausgeführt wird. In Form1, meiner Hauptform, benutze ich denselben Code und führe eine Abfrage aus: SELECT * FROM tbl_Players. Das funktioniert wie ein Zauber. Aber wenn ich versuche, diesen Code wiederzuverwenden und zu versuchen, ein zweites Dataset mit dieser Abfrage zu füllen, gibt 'SELECT * FROM tbl_Teams' Visual Studio den Fehler 'Ungültiger Objektname' tbl_Teams 'aus. – Dennis1679

+1

Sie können Daten aus zwei Datasets nicht in eine einzelne Listbox laden. Außerdem können Sie nicht mehr als zwei Spalten in einer Listbox anzeigen (es sei denn, Sie verwenden die Verkettung, um zwei Felder zusammenzuführen). Ich würde vorschlagen, eine Listenansicht in einem Rastermodus zu verwenden, um mehrere Spalten zu haben. Außerdem würde ich die SQL-Anweisung überarbeiten, um einen JOIN für die beiden Tabellen zu erstellen und das resultierende Dataset zum Füllen der Listenansicht zu verwenden. –

+0

Ich versuche das nicht. Das erste Dataset, das ich für die Anzeige einzelner Datensätze in einem Textfeld verwende, und ich möchte nur, dass zwei Spalten in meiner Listbox angezeigt werden. Das ist also kein Problem. Wenn ich eine Join-Anweisung mache, wie filtere ich die Ergebnisse heraus, die ich für meine ListBox benötige? – Dennis1679

Verwandte Themen