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
.
Vergessen zu erwähnen, dass ich das schon probiert habe. Bleibt noch leer. Aber danke. – Dennis1679
Was ist der Wert von 'MaxRows', sind Sie sicher, dass Sie Daten in' ds.Tables [0] 'haben? –
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