2016-04-04 18 views
0

'da Checkbox olarak görünen sonuçla ilgili olarak, değiştirdiğim önceden var olan bir sorgu var. Ortaya çıkan veriler, bir DataSet olarak doğrudan DataGridView nesnesine aktarılır. Datagridview öğesinde onay kutularına neden olan birden çok bit alanı vardır. Bu işlevselliği taklit etmek istiyorum, ancak belirli bir alanda bir Coalesce kullanmam gerekiyor.Coalesce bit değeri, .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; 

yukarıdaki sorgunun sonucu fonksiyonel doğru ancak kaynaşabilecek bir 1 olarak görünür veya bu yana bir 0. Bunun bir onay kutusu yapmak gerekir, bakan istemcisidir: SQL aşağıda listelenmiştir. Diğer alanlar (res_is_refund gibi) DataGridView'da bir onay kutusu olarak düzgün görünür.

Coalesce işlevini COALESCE(rra_is_mispull_error,false) [Mispull] olarak değiştirmeyi denedim, ancak bu yalnızca uygulamayı kilitliyor. COALESCE'yi hep birlikte kaldırmak, 1'ler ve 0'lar kadar kötü olan bir grup boşluğa neden olur. Bunu tahmin edebilirsiniz

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; 

(kolayca bir forum sonrası için transfer olacak bir biçimde olmadığı için pseudocode gibi)

DataGridView veri aktarır C# Bu formda C# kodu ve SQL aslında Coalesce sorunu dışında düzgün çalışıyor. veritabanında sütun BIT ise

+1

Düzenlemeyi takdir ediyorum, kodun SQL gibi görünmesini sağlayan bazı sorunlar yaşıyorum.) –

+0

rt_is_mispull_error'da veri tipiniz nedir? –

+0

Yorum yazılmadı, muhtemelen çok kısa olduğu için. Veri türü 'bit' –

cevap

1

Bu hile yapmak gerekir: veritabanındaki sütun bir INT ise

o zaman COALESCE tüm sonucunu döküm zorunda rra_is_mispull_error tip INT ait olduğunu ve sadece aşağıdaki aralığı [0-1] var o zaman bunu yapabilirsiniz:

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

Bu biraz değer, ancak case ifadesini eklemeye ve sizinle geri dönmeye çalışacağım. Bunu takdir ediyorum! –

2

, Böyle, bit 0 CAST zorunda:

aksi sonuç sütunu oluşturulur anı bir INT olarak yorumlanır
COALESCE(rra_is_mispull_error, CAST(0 AS bit)) 

Veri kümesi.

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; 

sütununda veri varsa:

CAST(COALESCE(rra_is_mispull_error, 0) AS bit)