【问题标题】:combobox retrieve value and take action c#组合框检索值并采取行动c#
【发布时间】:2023-03-06 18:05:01
【问题描述】:

前几天遇到了一些问题,当我得到帮助时成功解决了 (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,尽管不是。我是否走在正确的道路上,如果是这样,我应该如何进行?谢谢!

编辑:

抱歉,忘了提,CityChange() 是在 passcountryname 的 SelectedIndexChanged 属性上调用的。

EDIT2:

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

解决方案:

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

感谢所有试图帮助我的人。伙计们干杯

【问题讨论】:

  • 在该行和inspector区域放一个断点,写这个this.cmb_passedcountryname.SelectedValue并发布值,拜托
  • 根据断点,认为是DataRowView。
  • this.cmb_passedcountryname.SelectedValue {System.Data.DataRowView} 对象 {System.Data.DataRowView}
  • 你是如何加载 cmb_passedcountryname 的?
  • @Stephen 同时我找到了解决方案(请参阅已编辑的问题),但为了回复您,cmb_passedcountryname 是从 gridview 加载的。这实际上是问题所在,由于某种原因,combox 的值被视为 DataRowView 并且需要像您在解决方案中看到的那样进行转换。

标签: c# sql combobox


【解决方案1】:

我认为你可以在

中调试和查看值

cmb_passedcountryname.SelectedValue

可能是空值

【讨论】:

  • 疑为DataRowView。不知道为什么。
  • this.cmb_passedcountryname.SelectedValue {System.Data.DataRowView} 对象 {System.Data.DataRowView}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2017-05-30
相关资源
最近更新 更多