组合框检索值并采取行动c#

时间:2016-12-20 14:49:50

标签: c# sql combobox

前几天遇到了一些问题,并且在我得到帮助后成功解决了问题(combobox population based on each other sql c#)我想出的解决方案就像魅力一样:

public void City()
{

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT CityName FROM City WHERE CountryName = @CountryName", conn))
        {
            using (SqlDataAdapter da = new SqlDataAdapter(cmd))
            {
                cmd.Parameters.AddWithValue("@CountryName", this.cmb_countryname.SelectedValue);

                DataTable dt = new DataTable();
                da.Fill(dt);

                DataRow dr = dt.NewRow();
                dr["CityName"] = "";
                dt.Rows.InsertAt(dr, 0);
                this.city.DisplayMember = "CityName";
                this.city.ValueMember = "CityName";
                this.city.DataSource = dt;
            }
        }
    }
}
到目前为止,这么好。在cmb_countryname中选择Country1,City1在cmb_cityname中映射到它。正如我所说,没有问题(再次感谢显示此解决方案的用户)。但这是扭曲。一旦我将两个组合框与数据一起加载,我就将它们发送到gridview。还好。单击给定行,我将检索所有列,包括国家和城市,以及各种不同的组合框。还是没问题。现在我想要发生的是以下内容:当我在这个新的组合框中更改一个国家时,我希望拥有与以前相同的行为,即它将国家映射到城市。我对此的代码与前一个代码相同(完美无缺)显然该方法的名称和组合框已更改:

public void CityChange()
{

using (SqlConnection conn = new SqlConnection(connectionString))
{
    using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT CityName FROM City WHERE CountryName = @CountryName", conn))
    {
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            cmd.Parameters.AddWithValue("@CountryName", this.cmb_passedcountryname.SelectedValue);

            DataTable dt = new DataTable();
            da.Fill(dt);

            DataRow dr = dt.NewRow();
            dr["CityName"] = "";
            dt.Rows.InsertAt(dr, 0);
            this.passedcity.DisplayMember = "CityName";
            this.passedcity.ValueMember = "CityName";
            this.passedcity.DataSource = dt;
        }
    }
}

}

我正面临着这条错误信息,并且一直试图解决它超过一个小时:

  

“附加信息:从对象类型System.Data.DataRowView到已知的托管提供者本机类型不存在映射。”

根据我的理解,它将this.cmb_passedcountryname.SelectedValue视为System.Data.DataRowView,尽管不是。我是在正确的道路上,如果是的话,任何想法我应该如何进行?谢谢!

编辑:

sry,忘了提及,CityChange()在passcountryname的SelectedIndexChanged属性上被调用。

EDIT2:

代码中的一些错误,已编辑。

解决方案:

Why I get "System.Data.DataRowView" instead of real values in my Listbox?

感谢所有帮助我的人。欢呼的家伙

1 个答案:

答案 0 :(得分:0)

我认为您可以在

中调试和查看值

cmb_passedcountryname.SelectedValue

可能为空值