我遇到了 SelectedValue 控件的问题。我首先创建了一个组合框,与之相关的是以下方法:
private void Form1_Load(object sender, EventArgs e)
{
SqlCeConnection cn = new SqlCeConnection(@"Data Source = \Program Files\ParkSurvey\ParkSurvey.sdf; Persist Security Info = False; Password = *");
cn.Open();
SqlCeCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT Name FROM Cities ORDER BY Name ASC";
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
cn.Close();
cboCities.ValueMember = "CityId";
cboCities.DisplayMember = "Name";
cboCities.DataSource = ds.Tables[0];
cboCities.SelectedIndex = -1;
}
假设这是我在表单中出现的唯一代码,comboBox (cboCities) 会相应地填充。当我尝试用与该城市相关的相应公园填充第二个组合框(cboParks)时,我的问题就出现了。此方法如下所示:
private void cboCities_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboCities.SelectedIndex > -1)
{
SqlCeConnection cn = new SqlCeConnection(@"Data Source = \Program Files\ParkSurvey\ParkSurvey.sdf; Persist Security Info = False; Password = *");
cn.Open();
SqlCeCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT Name FROM [Parks] WHERE CityId =" + cboCities.SelectedValue + " ORDER BY Name ASC";
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
cn.Close();
cboParks.ValueMember = "ParkId";
cboParks.DisplayMember = "Name";
cboParks.DataSource = ds.Tables[0];
cboParks.SelectedIndex = -1;
}
}
当我加载我的移动应用程序时,第一个ComboBox不会正确地填充,实际上实际上显示:“system32.data ......”的行,以及选择其中任何一个时,我被带到运行时错误声明“解析查询时出错。[令牌行号 = 1,令牌行偏移量 = 52,错误令牌 = 数据]”。我一直相信问题本身来自此处的 SELECT 语句:
cmd.CommandText = "SELECT Name FROM [Parks] WHERE CityId =" + cboCities.SelectedValue + " ORDER BY Name ASC";
当我将 cboCities.SelectedValue 更改为 cboCities.SelectedItem 时,组合框 cboParks 会适当地填充减去过滤(它会带回所有数据)。我也可以将其更改为简单的 CityId(用于测试目的)并且 SELECT 语句有效。
我也尝试将其参数化,但遇到了一个完全不同的错误:“不存在从 DbType System.Data.DataRowView 到已知 SqlCeType 的映射。”
cmd.CommandText = "SELECT Name FROM [Parks] WHERE CityId = @CityId ORDER BY Name ASC";
cmd.Parameters.AddWithValue("@CityId", cboCities.SelectedValue);
基本上,是什么导致 SelectedValue 不起作用并带回第一种方法的适当 CityId ValueMember?我正在拔头发试图弄清楚这一点。另外,如果有人有另一种将选定数据绑定到组合框的方法,请分享!我是 C# 世界的新手,因此非常感谢任何帮助。谢谢你。