c# - ComboBox.SelectedValue 返回 System.Data.DataRowView
问题描述
错误是“不存在从对象类型 System.Data.DataRowView 到已知托管提供程序本机类型的映射。” 现在应该返回 Id comBoxMuscleGroup.SelectedValue
,comBoxTypeFitness.SelectedValue
但他们返回“System.Data.DataRowView”。有人可以帮帮我吗?
代码:
private void TypeFitness()
{
string query = "SELECT Naam FROM TypeFitness";
using (connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
{
DataTable data = new DataTable();
adapter.Fill(data);
comBoxTypeFitness.DisplayMember = "Naam";
comBoxTypeFitness.ValueMember = "FitnessId";
comBoxTypeFitness.DataSource = data;
}
}
private void MuscleGroup()
{
string query = "SELECT Naam FROM MuscleGroup";
using (connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
{
DataTable data = new DataTable();
adapter.Fill(data);
comBoxMuscleGroup.DisplayMember = "Naam";
comBoxMuscleGroup.ValueMember = "MuscleId";
comBoxMuscleGroup.DataSource = data;
}
}
private void Exercises()
{
string query = "SELECT Naam FROM Xercises AS X " +
"INNER JOIN MG_Exercise AS MGX ON MGX.ExerciseId = X.ExerciseId " +
"WHERE MGX.MuscleId = @MuscleId AND X.FitnessId = @FitnessId";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
//int MuscleId = ((DataRowView)comBoxMuscleGroup.SelectedValue).Row.Field<int>("MuscleId");
//int FitnessId = ((DataRowView)comBoxTypeFitness.SelectedValue).Row.Field<int>("FitnessId");
command.Parameters.AddWithValue("@MuscleId", comBoxMuscleGroup.SelectedValue);
command.Parameters.AddWithValue("@FitnessId", comBoxTypeFitness.SelectedValue);
DataTable data = new DataTable();
adapter.Fill(data);
clbXcercises.DisplayMember = "Naam";
clbXcercises.ValueMember = "ExerciseId";
clbXcercises.DataSource = data;
}
}
解决方案
属性 ValueMember 和 DisplayMember 是两个字符串,它们应该是提供来自 DataSource 的值的两个字段的名称。
您的查询不包含您为组合命名为 ValueMember 的字段。
因此,它不可能在属性 SelectedValue 中给出精确值,而只能给出用于在组合内构建行的类的名称(DataRowView)
如果要将 SelectedValue 设置为当前选定项目的 MuscleID 或 FitnessID 值,则需要从数据库中提取这些值。
您需要将查询更改为
string query = "SELECT FitnessID, Naam FROM TypeFitness";
和
string query = "SELECT MuscleID, Naam FROM MuscleGroup";
最后的查询也需要有练习ID
string query = "SELECT ExerciseID, Naam FROM Xercises AS X " +
"INNER JOIN MG_Exercise AS MGX ON MGX.ExerciseId = X.ExerciseId " +
"WHERE MGX.MuscleId = @MuscleId AND X.FitnessId = @FitnessId";
我还建议在使用 SelectedValue 属性之前始终检查 null 。
推荐阅读
- javascript - 我正在尝试使用正则表达式来查找一行中前 20 个字符中的所有模式
- django - 使用 Docker Compose、Python Django 和 Gitlab CI 时验证 Postgres 错误
- php - 使用 PHP 嵌入 YouTube 频道详情
- python - 如何防止在 tkinter 中弹出多个窗口?
- wordpress - Woocommerce REST API 错误:抱歉,您无法列出资源
- python - 为什么我的简单代码在使用输入值调用函数时不起作用?
- windows - PostgreSQL 安装程序消失在后台
- python - 关键路径 - dask
- javascript - 如何在没有 git 的情况下创建反应应用程序(跳过 git)?
- llvm - 位码中全局整数数组中的 zeroinitializer