我遇到了SelectedValue控件的问题。我已经首次创建组合框,以及与其相关的是以下的方法:什么会导致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;
}
}
当我加载了我的移动应用程序,第一组合框未正确填充,并在实际上线沿线的显示数据:“System32.Data ......”,并当选择它们中的任何一个时,我被带到运行时错误,其指出“解析查询时出现错误。 [令牌行号= 1,令牌行偏移= 52,令牌出错=数据]“。我已经导致相信这个问题本身是SELECT语句的位置:
cmd.CommandText = "SELECT Name FROM [Parks] WHERE CityId =" + cboCities.SelectedValue + " ORDER BY Name ASC";
当我改变cboCities.SelectedValue到cboCities.SelectedItem中,ComboBox 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?我正试图弄清楚这一点。此外,如果任何人有另一种方法将选定的数据绑定到comboBoxes,那么请分享!我是C#世界的新手,非常感谢任何帮助。谢谢。
你为什么将selectedIndex = -1? –
@UlfÅkerstedt:将cboCities的默认值设置为空,直到尝试选择一个城市才显示为空白。 – PicoDeGallo