在我的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
时抛出错误。
答案 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