将nvarchar值'System.Data.DataRowView'转换为数据类型int时转换失败

时间:2014-11-10 20:17:10

标签: c# sql-server windows-applications

我正在尝试根据组合框选择填充DataGridView。我不知道我哪里出错了 - 请帮忙......

这是我的代码:

public void GetTestGroups()
{
    string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    using (SqlConnection con = new SqlConnection(CS))
    {
        SqlDataAdapter da = new SqlDataAdapter("select LabTestGroupId,GroupName from tbl_LabTestGroup", con);
        DataTable dt = new DataTable();
        da.Fill(dt);

        cbTestGroup.DataSource = dt;
        cbTestGroup.DisplayMember = "GroupName";
        cbTestGroup.ValueMember = "LabTestGroupId";           
    }
}

private void cbTestGroup_SelectedIndexChanged(object sender, EventArgs e)
{
    string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    using (SqlConnection con = new SqlConnection(CS))
    {
        SqlDataAdapter da = new SqlDataAdapter("spGetTestNames", con);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;

        da.SelectCommand.Parameters.AddWithValue("@LabTestGroupId", cbTestGroup.SelectedValue.ToString());

        DataTable dt = new DataTable();
        da.Fill(dt);// Error in this line.

        dgvLabTests.DataSource = dt;
    }
}

我的存储过程:

create procedure spGetTestNames 
    @LabTestGroupId int
as
begin 
    select TestNames 
    from tbl_LabTests 
    where LabTestGroupId = @LabTestGroupId
end

1 个答案:

答案 0 :(得分:0)

当您希望string时,您已将int传递给存储过程。更改设置@LabTestGroupId参数的代码,如下所示。

da.SelectCommand.Parameters.AddWithValue(
    "@LabTestGroupId", 
    int.Parse(cbTestGroup.SelectedValue.Item["LabTestGroupId"].ToString()));

或者您需要确定如何将SelectedValue转换为所需的int值。我建议调试并查看观察窗口中的SelectedValue,以确切地确定它是什么以及如何获得所需的值。