【发布时间】:2016-06-13 16:36:04
【问题描述】:
在我的 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 列。我希望在此 ListBox 中显示列“team_ID”和“team_name”。
好的,只是想试试我的查询是否会显示在我的第一个表单 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'。
我不太明白为什么会引发这个错误,我尝试在谷歌上搜索问题,但我只能找到一些关于刷新智能感知缓存的 cmets。我试图在 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 时会引发错误。
【问题讨论】: