2016-02-24 41 views
1

我有一個由SQL表填充的下拉列表(selProject)。值是id字段,名稱是名稱字段。SqlDataSource ControlParameter不工作

我有一個由sqldatasource提供的gridview控件。

我想要做的是基於selProject下拉條件的條件where子句。我花了3個小時搜索並試圖弄清楚這一點。我擔心我會抓住並殺死一個共同的人。

當我在下拉列表中選擇一個特定值時,控件的selectedValue是「40」。我通過調試來驗證這一點。這是正確的和預期的。

我有一個controlParameter看起來像:

<asp:ControlParameter ControlID="selProject" PropertyName="SelectedValue" Name="ProjectIDPass" Type="Int32" /> 

的SelectCommand中包括:(Batches.ProjectID = @ProjectIDPass)爲Where子句的一部分。

我沒有行,沒有錯誤,沒有問題。我懷疑的問題是下拉列表的SelectedValue是一個字符串,而Batches.ProjectID是一個整數。

當我硬編碼40代入@ProjectIDPass的where子句時,它很好用。當我回到ControlParameter時炸彈就出來了。我嘗試了各種轉換技術。

有什麼辦法可以看到用實際值代替參數執行的SqlDataSouce SelectCommand。

回答

0

我懷疑的問題是下拉列表的SelectedValue是一個字符串,而Batches.ProjectID是一個整數。

可疑 - 該Type財產處理轉換,你的RDBMS會以及(儘管它會整型列可能轉換爲字符串,擰你的索引)。

是否有任何方法可以查看用實際值代替參數執行的SqlDataSouce SelectCommand。

像Sql Profiler這樣的RDBMS分析器將是最好的方法。但您也可以勾選SqlDataSource.SelectingSqlDataSource.Selected事件並檢查e.Commande.Arguments

+0

這非常有幫助。我遇到的問題是,在SqlDataSource.Selecting期間,我正在檢查selected.index和selected.value下拉列表的值,並且這些值尚未設置。所以它會向SQLDataSource提供無效的值,因此不會拉動行。我相信這是頁面加載的訂單的問題。在contentPlaceHolder部分中,我將設置來自母版頁變量的代碼中的dropdown.selectedvalue的值。從選擇事件中,母版頁變量尚不可用。有什麼想法嗎? –

+0

@CPalmer - 您可以在設置選定的值後重新綁定 –

+0

好吧,我看到初始數據綁定正在page_init上發生,在任何控制sqldatasource參數的下拉列表上設置值的代碼。 GAH!有關解決方法的任何想法? –

0

所以我解決了我的問題,並且完全不理解GridView是如何處理的。

我想根據2 Drop Downs的值加載數據而不做回發。通過這種方式,用戶可以從一個頁面到另一個頁面,而不必保持設置下拉菜單。這是不可能的,直到加載頁面,因爲直到頁面加載接近完成才設置下拉菜單。 Gridviews被填充在Page Init上。我可以使用我設置的cookie來設置SQL查詢中的數據,但是如果用戶更改了一個下拉列表,那麼在加載頁面之前cookie不會被新數據重置,所以我會加載錯誤的數據。

我找到了一個解決方案,它允許頁面加載,然後使用在那個點上正確設置的框的值,並使用它們來查詢數據集並將其賦值給GridView。實際顯示數據的技巧是自從頁面在此時被完全加載以來,它是一個更新面板。

請參閱這篇文章的完整說明:http://www.aspsnippets.com/Articles/Bind-Load-GridView-after-Page-load-is-completed-using-AJAX-UpdatePanel-in-ASPNet.aspx