Использование набора данных для заполнения списка

В моем приложении 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

Другие вопросы по тегам