2016-04-04 2 views
0

У меня есть уже существующий запрос, который я изменяю. Полученные данные переносятся непосредственно в объект DataGridView как DataSet. Есть несколько битовых полей, которые вызывают флажки в элементе datagridview. Я хочу подражать этой функциональности, но мне нужно использовать Coalesce в моем конкретном поле. SQL перечислены ниже:Объединить значение бит с результатом, появляющимся как флажок в .NET. Datagridview

SELECT res_id 
     , res_resolution [Resolution] 
     , res_type [Res. Type] 
     , res_is_refund [Refund] 
     , res_ship_replacement_today [Ship Today] 
     , res_ship_replacement_after_return [Ship After Return] 
     , res_return_required [Ret. Req.] 
     , res_test [Test] 
     , res_menu_divider [Menu Div.] 
     , res_orderby [Menu Order] 
     , res_new_return [New Returns] 
     , res_process_return [Receive Returns] 
     , res_modified [Last Updated] 
     , res_active [Active] 
     , COALESCE(rra_is_mispull_error, 0) [Mispull] 
    FROM jfi_return_resolution 
      LEFT JOIN jfi_return_resolution_attribute rra ON rra.rra_res_id = res_id 
    ORDER BY res_orderby; 

Результат вышеупомянутого запроса функционально правильно, но сливаются выглядит как 1 или 0. Поскольку это клиент сталкивается, мне нужно, чтобы сделать этот флажок. Другие поля (например, res_is_refund) отображаются в DataGridView правильно как флажок.

Я попытался изменить функцию слияния на COALESCE(rra_is_mispull_error,false) [Mispull], но это просто вызывает сбой приложения. Удаление COALESCE в совокупности приведет к пучке нулей, которая будет такой же плохой, как 1 и 0.

C#, который передает данные в DataGridView в таком виде (как псевдокод, потому что это не в такой форме, которая бы легко быть переданы на форуме сообщение)

SqlDataAdapter SDA = new SqlDataAdapter(); 
DataSet ds = new DataSet(); 

Using(SqlConnection Conn ...) 
{ 
    conn.Open(); 
    using(SqlCommand cmd = new SqlCommand(sql,conn)) 
    { 
     SDA.SelectCommand = cmd; 
     SDA.Fill(ds); 
    } 
} 

MyDGV.DataSource = ds.Tables[0].DefaultView; 

Вы можете предположить, что C# код и SQL фактически функционируют должным образом за пределами проблемы Coalesce.

+1

Оцените редактирование, у меня возникли проблемы с кодом, похожим на SQL =) –

+0

Каков ваш тип данных в rra_is_mispull_error? –

+0

Мой комментарий не отправил, возможно, потому, что он был слишком кратким. Тип данных «бит» –

ответ

1

Это должно сделать трюк:

SELECT res_id 
    , res_resolution [Resolution] 
    , res_type [Res. Type] 
    , res_is_refund [Refund] 
    , res_ship_replacement_today [Ship Today] 
    , res_ship_replacement_after_return [Ship After Return] 
    , res_return_required [Ret. Req.] 
    , res_test [Test] 
    , res_menu_divider [Menu Div.] 
    , res_orderby [Menu Order] 
    , res_new_return [New Returns] 
    , res_process_return [Receive Returns] 
    , res_modified [Last Updated] 
    , res_active [Active] 
    , CASE 
     WHEN ISNULL(rra_is_mispull_error, 0) = 0 THEN 'false' 
     ELSE 'true' 
     END AS [Mispull] 
FROM jfi_return_resolution 
     LEFT JOIN jfi_return_resolution_attribute rra ON rra.rra_res_id = res_id 
ORDER BY res_orderby; 

, если ваши данные в столбце rra_is_mispull_error имеет тип INT и у вас есть только следующий диапазон [0-1], то вы можете сделать это:

SELECT res_id 
    , res_resolution [Resolution] 
    , res_type [Res. Type] 
    , res_is_refund [Refund] 
    , res_ship_replacement_today [Ship Today] 
    , res_ship_replacement_after_return [Ship After Return] 
    , res_return_required [Ret. Req.] 
    , res_test [Test] 
    , res_menu_divider [Menu Div.] 
    , res_orderby [Menu Order] 
    , res_new_return [New Returns] 
    , res_process_return [Receive Returns] 
    , res_modified [Last Updated] 
    , res_active [Active] 
    , CAST(ISNULL(rra_is_mispull_error, 0) AS BIT) AS [Mispull] 
FROM jfi_return_resolution 
     LEFT JOIN jfi_return_resolution_attribute rra ON rra.rra_res_id = res_id 
ORDER BY res_orderby; 
+1

Это немного, но я попробую добавить оператор case и вернуться с вами. Я ценю это! –

2

Если столбец в базе данных БИТ, Вы должны забрасывать 0 биту, как это:

COALESCE(rra_is_mispull_error, CAST(0 AS bit)) 

в противном случае результат интерпретируется как INT на данный момент столбец создается в Dataset.

Если столбец в базе данных является INT, то вы должны бросить весь результат COALESCE:

CAST(COALESCE(rra_is_mispull_error, 0) AS bit) 

 Смежные вопросы

  • Нет связанных вопросов^_^