2016-09-07 19 views
0

我有一個6個複選框的報告屏幕,它會告訴報告必須顯示哪些列。但是,當我檢查一些複選框,並點擊按鈕沒有任何反應。這是我的代碼:帶有6個複選框的SQL查詢

connect = new SqlConnection(@"Data Source=LP12;Initial Catalog=SmmsData;Integrated Security=True"); 
connect.Open(); 

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = connect; 
cmd.CommandText = "SELECT DrukSensor, FlowSensor, TempSensor, KwaliteitSensor, Toerental, OlieVerbruik" 
+ " FROM SysteemSensorInfo" 
+ " WHERE [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
; 

cmd.Parameters.Add("@DrukSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@FlowSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@TempSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@KwaliteitSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@Toerental", SqlDbType.Bit); 
cmd.Parameters.Add("@OlieVerbruik", SqlDbType.Bit); 

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked; 
cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked; 
cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked; 
cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked; 
cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked; 
cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked; 

DataSet ds = new DataSet(); 
new SqlDataAdapter(cmd).Fill(ds); 
GridView1.DataSource = ds.Tables[0]; 
GridView1.DataBind(); 
GridView1.AutoGenerateColumns = true; 

當我排除這部分的代碼它工作得很好,但複選框將無法正常工作。

+ " WHERE [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
+ " AND [email protected]" 
; 

cmd.Parameters.Add("@DrukSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@FlowSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@TempSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@KwaliteitSensor", SqlDbType.Bit); 
cmd.Parameters.Add("@Toerental", SqlDbType.Bit); 
cmd.Parameters.Add("@OlieVerbruik", SqlDbType.Bit); 

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked; 
cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked; 
cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked; 
cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked; 
cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked; 
cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked; 

我在做什麼錯或我能解決我的複選框問題更簡單的方法?

希望你們有答案!

+1

你能定義*不起作用嗎?它會拋出一個錯誤嗎?你沒有得到預期的結果嗎?你檢查過「CheckBox * .Checked」對象的值嗎? – Siyual

+0

隨着wwont的工作我的意思是屏幕閃爍,但不顯示任何東西。不幸的是我沒有顯示錯誤。使用datagrid顯示選中的複選框的列。而且我也檢查了複選框對象的值,但是這對我也沒有幫助。 –

回答

0

嘗試改變

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked; 

到:

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked?1:0; 

所有checkbox.checked項目。

或(更好),取出所有的params.Add並將其更改爲AddWithValue()

cmd.Parameters.AddWithValue("@DrukSensor",CheckBoxDruk.Checked?1:0); 
+0

更好的方法是'cmd.Parameters.Add(「@ DrukSensor」,SqlDbType.Bit).Value = CheckBoxDruk.Checked;' – serhiyb

+0

這兩個選項不幸的沒有工作:(屏幕仍然閃爍,但沒有顯示任何東西在網格視圖 –

+0

好的 - 我誤解了。您的代碼用於數據庫查詢。如果您需要幫助將複選框與列相關聯,請修改您的問題以顯示您的網格列和您的複選框以及用於更改列可見性的邏輯。 –

0

波多黎各,

數據庫是否有什麼數據類型爲以下字段? DrukSensor,流量傳感器,TempSensor,KwaliteitSensor,Toerental,OlieVerbruik

如果他們利用在db小整數,那麼下面應該工作。

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked ? 1 :0; 
cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked ? 1 : 0; 
cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked ? 1 :0; 
cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked ? 1:0; 
cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked ? 1 : 0; 
cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked ? 1: 0; 

Checkboxes.Checked是一個布爾值。如果您的字段以布爾值的形式存儲在數據庫中,那麼您需要弄清楚如何在參數中指定該值。

cmd.Paramters[@DrukSensor"].Value = CheckBoxDruk.Checked ? "true" : "false"; 

或其他一些。

希望這會有所幫助。

+0

他們都在我的數據庫中漂浮。這個變化很大嗎? –

+0

似乎奇怪使用浮點數據庫來表示布爾值,不是嗎?數據庫中的這些傳感器字段是什麼?你想用複選框做什麼?您是否嘗試使用複選框在屏幕上顯示/不顯示列?因爲方式不同。 –

+0

數據庫中的數據將來自傳感器的信息,這就是爲什麼我需要使用浮游物。我需要複選框來對我的sql查詢進行說明,以獲取我的報告所需的特定行。如果這不起作用,我想我需要在屏幕上顯示或不顯示柱子。 –

0

變化

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked; 

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.CheckState; 

If(CheckBoxDruk.CheckState == CheckState.Checked) 
    cmd.Parameters["@DrukSensor"].Value = 1; 
else 
    cmd.Parameters["@DrukSensor"].Value = 0; 

查看this約CheckBox.CheckState屬性信息。