Ошибка преобразования при преобразовании значения nvarchar «System.Data.DataRowView» в тип данных int

Я пытаюсь заполнить DataGridView на основе выбора comboBox. Я не знаю, где я ошибаюсь - пожалуйста, помогите ..

Вот мой код:

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

person keerthi    schedule 10.11.2014    source источник


Ответы (1)


Вы передаете string своей хранимой процедуре, когда она ожидает int. Измените код, который устанавливает параметр @LabTestGroupId следующим образом.

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

Или вам нужно определить, как преобразовать SelectedValue в желаемое значение int. Я предлагаю отладить и просмотреть SelectedValue в окне просмотра, чтобы точно определить, что это такое и как добраться до нужного значения.

person juharr    schedule 10.11.2014
comment
Спасибо, но это не работает. Он говорит, что не может преобразовать объект в строку. - person keerthi; 10.11.2014
comment
Возможно, вам придется сделать int.Parse(cbTestGroup.SelectedValue.ToString()). Попробуйте точно посмотреть, что такое SelectedValue в отладчике. - person juharr; 10.11.2014
comment
Я попробовал, пишет, что входная строка имеет неверный формат. - person keerthi; 10.11.2014
comment
Каков тип данных вашего столбца tbl_LabTests.LabTestGroupId - person juharr; 10.11.2014
comment
Тогда SelectedValue должен быть целым числом или, по крайней мере, строкой, которую можно преобразовать в целое число. Является ли этот столбец обнуляемым? И если да, то может ли SelectedValue быть для столбца null? - person juharr; 10.11.2014
comment
На самом деле столбец не нулевой - person keerthi; 10.11.2014
comment
Хорошо, я думаю, что знаю, что происходит. Я считаю, что SelectedValue это System.Data.DataRowView. Я обновлю свой ответ соответственно. - person juharr; 10.11.2014
comment
да, когда я навожу курсор на выбранное значение, отображается System.Data.DataRowView. - person keerthi; 10.11.2014
comment
Решил это сам, я просто изменил событие на SelectionChangedCommitted. - person keerthi; 11.11.2014