使用后面的代码访问select命令

时间:2011-08-12 17:25:22

标签: asp.net vb.net listview select

如何更改我的指令,并将其保留在页面的其余部分(使用分页,排序时)?

我有一页复选框:

<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命令所做的更改是否会保留?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想打开一个新页面,并在新页面的ListView SqlDataSource的select语句中使用前一页的值,对吗?

首先,一些观察结果:

  1. 在您的第一页中,您似乎打算使用查询字符串(PostBackUrl="report.aspx?)调用第二页,但您似乎没有设置查询字符串。
  2. PreRender控件的ListView事件签名错误。它只需要一个参数EventArgs

    受保护的子ReportListView_reRender(ByVal e As EventArgs)

  3. 您的ListView似乎正在使用SqlDataSource作为绑定来源(DataSource="ReportListViewSDS")。更多关于以下内容。
  4. SqlCommand控件没有ListView属性或方法。
  5. 由于您将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}}事件中。

    可在此处找到更多信息:

    SqlDataSource Class

    FormParameter Class

答案 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

这似乎是这样做的。其实很简单。