2011-08-12 87 views
0

如何更改我的selecommand,並在頁面的其餘部分(使用分頁,排序時)保留它?使用代碼隱藏訪問selectcommand

我有一個複選框頁:

<input type="checkbox" name="checkbox_1" /> 
<input type="checkbox" name="checkbox_2" /> 
<input type="checkbox" name="checkbox_3" /> 
<asp:Button runat="server" Id="CustomButton" text="Create Report" PostBackUrl="report.aspx?"/> 

然後在report.aspx我要生成基於複選框的選擇標準列表視圖。

<asp:ListView runat="server" ID="ReportListView" DataSourceID="ReportListViewSDS"> 
    <LayoutTemplate runat="server"> 
     ...<asp:PlaceHolder runat="server" ID="itemPlaceHolder" />... 
    </LayoutTemplate> 
<ItemTemplate> 
    ... 
</ItemTemplate> 
</asp:ListView> 

我希望能夠對該列表視圖進行排序和分頁。這是什麼,我想在後面的代碼的想法:

Protected Sub ReportListView_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) 

    ' What's the correct way to reference the listview? 
    ' When I use the below code i get "ReportListView is not declared...." 

    ' ReportListView.SqlCommand = "SELECT " & checkbox1 & ", " & checkbox2 & " WHERE..." 

End Sub 

我不知道如果我即使在這個正確的方向前進,任何幫助表示讚賞。當我將分頁或排序應用到列表視圖時,我對PreRender函數中的sql命令所做的更改會保留嗎?

回答

0

其實這比我想象的要容易得多。對不起,我猜只是一個新手錯誤。我最後只是在做:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim SqlCommand As String 
    ' create the sql command using the Request.Form vars i wanted. 
    ' ... 
    ' Run the sql command, I can access the listview directly, just like a global variable: 
    ReportListView.SelectCommand = SqlCommand 
    ReportListView.DataBind() 
End Sub 

而且似乎這樣做。其實很簡單。

0

如果我正確理解您的問題,您希望打開一個新頁面,並在新頁面上的ListViewSqlDataSource的select語句中使用上一頁的值,對嗎?

首先,一些意見:

  1. 在第一頁,你似乎是打算調用與查詢字符串(PostBackUrl="report.aspx?)的第二頁,但你似乎沒有設置的查詢字符串。
  2. 您的PreRender事件爲ListView控件具有錯誤的簽名。只需要一個參數,EventArgs

    保護小組ReportListView_PreRender(BYVALË作爲EventArgs的)

  3. ListView似乎使用SqlDataSource,因爲它是綁定源(DataSource="ReportListViewSDS")。更多關於下面的內容。
  4. 沒有SqlCommand屬性或ListView控件的方法。

既然你綁定ListViewSqlDataSource,它會是最簡單的設置中選擇命令,並在標記的參數,如:

<asp:SqlDataSource ID="ReportListViewSDS" runat="server" 
    SelectCommand="SELECT checkbox1, checkbox2, checkbox3 FROM <table> WHERE checkbox1 = @parm1 AND checkbox2 = @parm2 AND checkbox3 = @parm3"> 
    <SelectParameters> 
     <asp:FormParameter FormField="checkbox_1" Name="parm1" /> 
     <asp:FormParameter FormField="checkbox_2" Name="parm2" /> 
     <asp:FormParameter FormField="checkbox_3" Name="parm3" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

SelectCommand替換爲<table>你的桌子的名字。根據需要,您可以調整所選列的名稱以及所使用的參數。我簡單地使用了3個複選框,因爲這是您在發佈的代碼中所擁有的。

還要注意,沒有驗證的參數將由SqlDataSource來完成,因此,如果你想防止SQL注入攻擊等安全隱患,你會想要做驗證的Selecting事件SqlDataSource的。

更多信息可以在這裏找到:

SqlDataSource Class

FormParameter Class

+0

蘇里,我的問題不是很清楚。我熟悉標準列表視圖,並使用「選擇」命令和您提到的參數。但我的目標是選擇查詢將具有來自Request.From的條目(即前面的頁面複選框)。我發現我讓它變得更加困難。查看下面的解決方案。 – russds