使用数据集填充列表框

时间:2016-06-13 16:36:04

标签: c# listbox dataset waf

在我的Windows窗体应用程序中,我正在尝试使用数据集中的值填充列表框,但它只是保持为空并且不会出现任何异常。

这是我的代码

        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中。

好的,只是试试我的Query是否会显示在我的第一个Form 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管理工作室时,我能够创建第二个表,然后我在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 个答案:

答案 0 :(得分:1)

检查数据集的表是否已填充(使用代码中断)。您需要使用DataAdapter来填充数据集,我不认为您这样做。另外,如果这对您没有帮助,请发布您的SQL查询。

答案 1 :(得分:0)

您可以使用:

lsb_TeamsTeams.DataSource = ds.Tables[0];

并检查ds.Tables[0]是否包含数据。

您还必须更改第二个查询DBPlayers.Sql以从tbl_Teams表中获取数据:

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

因为您使用相同的玩家查询来填充借调DataSet