如何更改我的指令,并将其保留在页面的其余部分(使用分页,排序时)?
我有一页复选框:
<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>
我希望能够对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 :(得分:0)
如果我理解你的问题,你想打开一个新页面,并在新页面的ListView
SqlDataSource
的select语句中使用前一页的值,对吗?
首先,一些观察结果:
PostBackUrl="report.aspx?
)调用第二页,但您似乎没有设置查询字符串。 PreRender
控件的ListView
事件签名错误。它只需要一个参数EventArgs
:
受保护的子ReportListView_reRender(ByVal e As EventArgs)
ListView
似乎正在使用SqlDataSource
作为绑定来源(DataSource="ReportListViewSDS"
)。更多关于以下内容。SqlCommand
控件没有ListView
属性或方法。由于您将ListView
绑定到SqlDataSource
,因此最简单的方法是在标记中设置Select命令和参数,如下所示:
<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>
将<table>
中的SelectCommand
替换为您的表名。您可以根据需要调整所选列的名称以及您正在使用的参数。我只使用了3个复选框,因为这就是您发布的代码中的内容。
另请注意,参数的 NO VALIDATION 将由SqlDataSource
完成,因此如果您想要防止SQL注入攻击和其他安全风险,您需要进行验证在Selecting
的{{1}}事件中。
可在此处找到更多信息:
答案 1 :(得分: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
这似乎是这样做的。其实很简单。