2016-04-04 3 views
0

私が変更している既存のクエリがあります。結果のデータは、DataSetとしてDataGridViewオブジェクトに直接プッシュされます。 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; 

上記のクエリの結果は、機能的に正しいですが、これはクライアントの直面しているので、COALESCEは、1または0として表示され、私は、このチェックボックスにする必要があります。他のフィールド(res_is_refundなど)は、DataGridViewにチェックボックスとして正しく表示されます。

私は凝集機能をCOALESCE(rra_is_mispull_error,false) [Mispull]に変更しようとしましたが、アプリケーションがクラッシュするだけです。すべてのCOALESCEを削除すると、1と0のように悪いヌルが発生します。あなたがいることを推測することができます

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; 

(それが簡単にフォーラムの投稿に譲渡するだろう形ではないので、擬似コードとして)

のDataGridViewにデータを転送するC#のは、このフォームでありますC#コードとSQ​​Lは実際にCoalesceの問題の外で正しく機能します。データベースでの列がBITである場合は

+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]しかない場合は、これを行うことができます。

+1

これはビット値ですが、case文を追加して返すようにします。それは有り難いです! –

2

、あなたはこのように、ビットに0をキャストする必要があります。

そうでない場合は、結果は列がで作成された時点でINTと解釈され
COALESCE(rra_is_mispull_error, CAST(0 AS bit)) 

データセット。

データベースであなたの列が、あなたはCOALESCEの結果全体をキャストする必要がINTの場合:

CAST(COALESCE(rra_is_mispull_error, 0) AS bit) 
関連する問題