gpt4 book ai didi

c# - 对象类型 System.Data.DataRowView 不存在映射?

转载 作者:行者123 更新时间:2023-11-30 17:44:39 25 4
gpt4 key购买 nike

我有这个代码

private void cmb_public_manag_SelectedIndexChanged(object sender, EventArgs e)
{
//DB_Mange.fill_combox_Exchange("[Public_administration_dept]", cmb_public_manag_dept, "dept_id", "dept_name", cmb_public_manag.SelectedValue, "");
using (SqlConnection con = new SqlConnection(SQL_DB.con_str))
{
con.Open();
using (SqlCommand scm = new SqlCommand())
{
scm.Connection = con;
scm.CommandText = "select * from Public_administration_dept where Public_administration_id=@dept_id";
scm.Parameters.AddWithValue("@dept_id",cmb_public_manag.SelectedValue);
DataTable dt = new DataTable();
SqlDataAdapter adpt = new SqlDataAdapter();
adpt.SelectCommand = scm;
adpt.Fill(dt);

cmb_public_manag_dept.DisplayMember = dt.Columns["dept_name"].ToString();
cmb_public_manag_dept.ValueMember = dt.Columns["dept_id"].ToString();
cmb_public_manag_dept.DataSource = dt;
}
}
}

总是向我显示此错误

No mapping exists from object type System.Data.DataRowView to a known managed provider native type. this code SelectedIndexChanged

最佳答案

我想异常是在

scm.Parameters.AddWithValue("@dept_id",cmb_public_manag.SelectedValue);

cmb_public_manag.SelectedValue 不是 int 而是 DataRowView。然后使用:

int dept_id = ((DataRowView) cmb_public_manag.SelectedValue).Row.Field<int>("dept_id");
scm.Parameters.AddWithValue("@dept_id", dept_id );

cmb_public_manag.SelectedValueDataRowView 而不是 int 的原因是赋值顺序。

始终提供 DataSource 作为最后一步,因为这可能会导致 winforms 中的事件。在这些事件中,DisplayMemberValueMember 尚未分配。在这种情况下,代码位于您当前正在分配 DataSourceComboBoxSelectedIndexChanged 中,因此该方法会调用自身。但是因为您首先分配了 DataSource,所以 ValueMember 未分配并且整个对象从 SelectedValue 返回。

所以改用这个:

cmb_public_manag_dept.SelectedIndexChanged -= cmb_public_manag_SelectedIndexChanged;
cmb_public_manag_dept.DisplayMember = "dept_name";
cmb_public_manag_dept.ValueMember = "dept_id";
cmb_public_manag_dept.DataSource = dt;
cmb_public_manag_dept.SelectedIndexChanged += cmb_public_manag_SelectedIndexChanged;

请注意,当您更改其中的数据源时,您也应该取消订阅此事件。

另请注意,我已将 dt.Columns["dept_name"].ToString() 更改为简单的 "dept_name",这是相同的。

关于c# - 对象类型 System.Data.DataRowView 不存在映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29257562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com