C# ComboBox.SelectedValue返回System.Data.DataRowView

C# ComboBox.SelectedValue返回System.Data.DataRowView,c#,combobox,selectedvalue,datarowview,C#,Combobox,Selectedvalue,Datarowview,错误是“不存在从对象类型System.Data.DataRowView到已知托管提供程序本机类型的映射”。现在comBoxMuscleGroup.SelectedValue和comBoxTypeFitness。SelectedValue应返回Id,但返回“System.Data.DataRowView”。有人能帮我吗 代码: private void TypeFitness() { string query=“从TypeFitness中选择Naam”; 使用(connection=newsqlc

错误是“不存在从对象类型System.Data.DataRowView到已知托管提供程序本机类型的映射”。现在
comBoxMuscleGroup.SelectedValue
comBoxTypeFitness。SelectedValue
应返回Id,但返回“System.Data.DataRowView”。有人能帮我吗

代码:

private void TypeFitness()
{
string query=“从TypeFitness中选择Naam”;
使用(connection=newsqlconnection(connectionString))
使用(SqlDataAdapter=newsqldataadapter(查询、连接))
{
DataTable数据=新DataTable();
适配器。填充(数据);
comBoxTypeFitness.DisplayMember=“Naam”;
comBoxTypeFitness.ValueMember=“FitnessId”;
comBoxTypeFitness.DataSource=数据;
}
}
私有void MuscleGroup()
{
string query=“从MuscleGroup中选择Naam”;
使用(connection=newsqlconnection(connectionString))
使用(SqlDataAdapter=newsqldataadapter(查询、连接))
{
DataTable数据=新DataTable();
适配器。填充(数据);
comBoxMuscleGroup.DisplayMember=“Naam”;
comBoxMuscleGroup.ValueMember=“MuscleId”;
comBoxMuscleGroup.DataSource=数据;
}
}
私人空位演习()
{
string query=“从Xercises中选择Naam作为X”+
“在MGX.ExerciseId=X.ExerciseId上作为MGX的内部联接MGU练习”+
“其中MGX.MuscleId=@MuscleId和X.FitnessId=@FitnessId”;
使用(connection=newsqlconnection(connectionString))
使用(SqlCommand=newsqlcommand(查询、连接))
使用(SqlDataAdapter=newsqldataadapter(命令))
{
//int MuscleId=((DataRowView)comBoxMuscleGroup.SelectedValue).Row.Field(“MuscleId”);
//int FitnessId=((DataRowView)comBoxTypeFitness.SelectedValue).Row.Field(“FitnessId”);
command.Parameters.AddWithValue(“@MuscleId”,comBoxMuscleGroup.SelectedValue);
command.Parameters.AddWithValue(“@FitnessId”,comBoxTypeFitness.SelectedValue);
DataTable数据=新DataTable();
适配器。填充(数据);
clbxcerces.DisplayMember=“Naam”;
clbxcerces.ValueMember=“ExerciseId”;
clbxcerces.DataSource=数据;
}
}

属性ValueMember和DisplayMember是两个字符串,应该是提供数据源值的两个字段的名称。
您的查询不包含已命名为组合的ValueMember的字段。
因此,它不可能在属性SelectedValue中给出精确的值,而只能给出用于在组合(DataRowView)中构建行的类的名称

如果要将SelectedValue设置为当前选定项目的MuscleID或FitnessID值,则需要从数据库中提取这些值

您需要将查询更改为

string query = "SELECT FitnessID, Naam FROM TypeFitness";

最后的查询还需要有exerciseID

  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。

属性ValueMember和DisplayMember是两个字符串,应该是提供数据源中值的两个字段的名称。
您的查询不包含已命名为组合的ValueMember的字段。
因此,它不可能在属性SelectedValue中给出精确的值,而只能给出用于在组合(DataRowView)中构建行的类的名称

如果要将SelectedValue设置为当前选定项目的MuscleID或FitnessID值,则需要从数据库中提取这些值

您需要将查询更改为

string query = "SELECT FitnessID, Naam FROM TypeFitness";

最后的查询还需要有exerciseID

  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。

您的查询中没有任何ID。只有纳姆。如果您在加载组合时不提供id,它应该如何返回id?不是
comBoxTypeFitness.ValueMember=“FitnessId”
给它一个值吗?不是,因为只有您从db给它(组合)一个id值,它才能返回值。您需要将其添加到queriesstring query=“SELECT MuscleID,Naam FROM MuscleGroup”;依此类推其他两个查询(execises组合也需要它)谢谢!不过,我还有一个较小的第二个问题。它可以工作,但在开始时以及在它首先显示
System.Data.DataRowView
之后的一些时候,当我再次单击时,它会显示正确的内容。知道吗?你的查询中没有任何ID。只有纳姆。如果您在加载组合时不提供id,它应该如何返回id?不是
comBoxTypeFitness.ValueMember=“FitnessId”
给它一个值吗?不是,因为只有您从db给它(组合)一个id值,它才能返回值。您需要将其添加到queriesstring query=“SELECT MuscleID,Naam FROM MuscleGroup”;依此类推其他两个查询(execises组合也需要它)谢谢!不过,我还有一个较小的第二个问题。它可以工作,但在开始时以及在它首先显示
System.Data.DataRowView
之后的一些时候,当我再次单击时,它会显示正确的内容。有什么想法吗?谢谢!你连一个问题都没看就解决了两个问题!最后一句话解决了我的第二个小问题谢谢你!你连一个问题都没看就解决了两个问题!最后一句话解决了我的第二个小问题D