Использование набора данных для заполнения списка
В моем приложении Windows Forms я пытаюсь заполнить список значениями из набора данных, но он остается пустым и не дает никаких исключений.
Это мой код
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);
}
}
Имя списка - "lsb_TeamsTeams", имя набора данных - "ds". Таблица содержит 3 столбца. Я хочу, чтобы столбцы "team_ID" и "team_name" отображались в этом ListBox.
Хорошо, просто чтобы проверить, будет ли мой запрос отображаться в моей первой форме, Form1, я попробовал следующее. Здесь я пытаюсь заполнить второй набор данных своей второй таблицей в базе данных, а затем пытаюсь передать данные в ListBox.
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);
}
}
Это, к сожалению, выдает эту ошибку: Invalid object name 'tbl_Teams'
,
Я не совсем понимаю, почему это вызвало эту ошибку, я попытался найти проблему в Google, но я мог только найти некоторые комментарии об обновлении intellisense кеша. Я пытался найти это в Visual Studio 2015 Enterprise, но не смог.
Вот методы подключения к базе данных, которые я использую.
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;
}
Поэтому, пытаясь получить доступ к базе данных через SQL Server Management Studio, я обнаружил, что созданная мной таблица в Visual Studio отсутствует в базе данных, что объясняет, почему я получил ошибку Invalid object name 'table'
Как это может быть? Я считаю, что это как-то связано с тем, что я создал вторую таблицу с помощью Visual Studio. Каким-то образом она добавила его в обозреватель серверов Visual Studio, но не в реальную базу данных. При использовании SQL Management Studio я смог создать вторую таблицу, и тогда мой запрос в C# работал бы.
Но теперь появилась следующая проблема с заполнением ListBox.
Я не могу отобразить какие-либо данные в своем ListBox, но я могу отобразить данные в DataGridView, но я бы хотел отобразить их в ListBox.
Мой код:
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);
}
}
Я пробовал несколько позиций строки.DataSource, но это не помогло. Я также попытался поместить данные из моего другого набора данных ds.tables[0] в ListBox, а затем он отображает данные из столбца DisplayMember, но выдает ошибку при запуске приложения. cannot bind to the new value member. Parameter name: value
,
2 ответа
Проверьте, не заполнены ли таблицы вашего набора данных (с использованием разрывов кода). Вам нужно использовать DataAdapter для заполнения набора данных, и я не думаю, что вы это делаете. Кроме того, пожалуйста, оставьте свой SQL-запрос, если это не поможет вам.
Ты можешь использовать:
lsb_TeamsTeams.DataSource = ds.Tables[0];
и проверьте, если ds.Tables[0]
содержит данные.
Вы также должны изменить второй запрос DBPlayers.Sql
чтобы получить данные от tbl_Teams
Таблица:
DBPlayers.Sql = Properties.Settings.Default.SQL_Players;
ds2 = DBPlayer.GetConnection;
потому что вы используете тот же запрос игроков, чтобы заполнить второй DataSet