【问题标题】:GridView isn't paging or sorting when inside a user control在用户控件内时,GridView 不分页或排序
【发布时间】:2011-11-22 13:49:21
【问题描述】:

我的 Gridview 不会分页或排序。我的意思是当我尝试按列排序或尝试浏览 GridView 时,GridView 中的数据不会改变。

我将它放在用户控件 (.ascx) 上的 UpdatePanel 中。当我在用户控件之外尝试时,下面的代码可以正常工作。

这是我的代码:

    <asp:GridView runat="server" ID="grdStats" AutoGenerateColumns="false" Width="100%" AllowSorting="true"
        AllowPaging="true" PageSize="20" PagerSettings-Mode="NumericFirstLast" PagerSettings-Position="TopAndBottom">
        <Columns>
            <asp:BoundField DataField="campaignname" HeaderText="Campaign Name" SortExpression="campaignname" />
            <asp:BoundField DataField="site_name" HeaderText="Outlet" SortExpression="site_name" />
            <asp:BoundField DataField="filename" HeaderText="Media" SortExpression="filename" />
            <asp:BoundField DataField="playinterval" HeaderText="Play Interval" SortExpression="playinterval" />
        </Columns>
    </asp:GridView>

这是后端:

Protected Sub grdStats_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles grdStats.PageIndexChanging
    grdStats.PageIndex = e.NewPageIndex
    GetCampaignData()
End Sub

Protected Sub grdStats_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grdStats.Sorting

    If e.SortExpression = ViewState("sortExpr") Then
        ViewState("sortExpr") = e.SortExpression & " desc"
    Else
        ViewState("sortExpr") = e.SortExpression
    End If

    GetCampaignData()

End Sub

' ######## POPULATE DATA #########

Private Sub GetCampaignData(Optional ByVal CompanyID As Integer = 0)
    Dim sql As String = Nothing

    ' Check user access level.
    If Session("userlevel") = 1 Then
        ' Current user is admin.

        ' If a company has been filtered, get it's data, else, get all campaign data.
        If CompanyID <> 0 Then
            sql = "SELECT" & vbCrLf & _
            "   a.campaignid," & vbCrLf & _
            "   a.companyid," & vbCrLf & _
            "   a.campaignname," & vbCrLf & _
            "   a.filename," & vbCrLf & _
            "   startdate," & vbCrLf & _
            "   enddate," & vbCrLf & _
            "   a.playinterval," & vbCrLf & _
            "   a.ActiveStatus," & vbCrLf & _
            "   b.*," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS c" & vbCrLf & _
            "       WHERE DAY(date_played) = DAY(CURRENT_DATE)" & vbCrLf & _
            "       AND c.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS today," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS d" & vbCrLf & _
            "       WHERE date_played > CURRENT_DATE - INTERVAL 7 DAY" & vbCrLf & _
            "       AND d.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS past_week," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS e" & vbCrLf & _
            "       WHERE e.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS playcount" & vbCrLf & _
            "FROM campaigns AS a" & vbCrLf & _
            "INNER JOIN companies AS b ON a.companyid = b.companyid" & vbCrLf & _
            "WHERE a.ActiveStatus = 1" & vbCrLf & _
            "AND a.companyid = " & CompanyID

        Else
            sql = "SELECT" & vbCrLf & _
            "   a.campaignid," & vbCrLf & _
            "   a.companyid," & vbCrLf & _
            "   a.campaignname," & vbCrLf & _
            "   a.filename," & vbCrLf & _
            "   startdate," & vbCrLf & _
            "   enddate," & vbCrLf & _
            "   a.playinterval," & vbCrLf & _
            "   a.ActiveStatus," & vbCrLf & _
            "   b.*," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS c" & vbCrLf & _
            "       WHERE DAY(date_played) = DAY(CURRENT_DATE)" & vbCrLf & _
            "       AND c.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS today," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS d" & vbCrLf & _
            "       WHERE date_played > CURRENT_DATE - INTERVAL 7 DAY" & vbCrLf & _
            "       AND d.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS past_week," & vbCrLf & _
            "   (SELECT COUNT(*)" & vbCrLf & _
            "       FROM campaignstats AS e" & vbCrLf & _
            "       WHERE e.campaignid = a.campaignid" & vbCrLf & _
            "   ) AS playcount" & vbCrLf & _
            "FROM campaigns AS a" & vbCrLf & _
            "INNER JOIN companies AS b ON a.companyid = b.companyid" & vbCrLf & _
            "WHERE a.ActiveStatus = 1"


        End If
    Else
        ' User is not an admin. 
        sql = "SELECT" & vbCrLf & _
        "   a.campaignid," & vbCrLf & _
        "   a.companyid," & vbCrLf & _
        "   a.campaignname," & vbCrLf & _
        "   a.filename," & vbCrLf & _
        "   startdate," & vbCrLf & _
        "   enddate," & vbCrLf & _
        "   a.playinterval," & vbCrLf & _
        "   a.ActiveStatus," & vbCrLf & _
        "   b.*," & vbCrLf & _
        "   (SELECT COUNT(*)" & vbCrLf & _
        "       FROM campaignstats AS c" & vbCrLf & _
        "       WHERE DAY(date_played) = DAY(CURRENT_DATE)" & vbCrLf & _
        "       AND c.campaignid = a.campaignid" & vbCrLf & _
        "   ) AS today," & vbCrLf & _
        "   (SELECT COUNT(*)" & vbCrLf & _
        "       FROM campaignstats AS d" & vbCrLf & _
        "       WHERE date_played > CURRENT_DATE - INTERVAL 7 DAY" & vbCrLf & _
        "       AND d.campaignid = a.campaignid" & vbCrLf & _
        "   ) AS past_week," & vbCrLf & _
        "   (SELECT COUNT(*)" & vbCrLf & _
        "       FROM campaignstats AS e" & vbCrLf & _
        "       WHERE e.campaignid = a.campaignid" & vbCrLf & _
        "   ) AS playcount" & vbCrLf & _
        "FROM campaigns AS a" & vbCrLf & _
        "INNER JOIN companies AS b ON a.companyid = b.companyid" & vbCrLf & _
        "WHERE a.ActiveStatus = 1" & vbCrLf & _
        "AND a.companyid = " & CInt(Session("companyid"))
    End If

    grdCampaigns.DataSource = get_data(sql)
    grdCampaigns.DataBind()

    For i As Integer = 0 To grdCampaigns.Rows.Count - 1
        grdCampaigns.Rows(i).Cells(2).Text = Microsoft.VisualBasic.Left(grdCampaigns.Rows(i).Cells(2).Text, 10)
        grdCampaigns.Rows(i).Cells(3).Text = Microsoft.VisualBasic.Left(grdCampaigns.Rows(i).Cells(3).Text, 10)
    Next
End Sub

Public Function get_data(ByVal SQLStatement As String) As DataView

    'Populates the datatable
    Dim dt As Data.DataTable

    dt = db.GetDataTable(SQLStatement)

    Dim dv As System.Data.DataView = New System.Data.DataView(dt)

    If Not ViewState("sortExpr") Is Nothing Then
        dv.Sort = ViewState("sortExpr")
    Else
        dv = dt.DefaultView
    End If

    Session("dv5") = dv
    Return dv
End Function

任何帮助将不胜感激。

【问题讨论】:

  • 您的代码对我来说看起来不错。您对用户控件背后的代码还有其他内容吗?
  • 只需编写代码即可编辑和删除另一个网格中的信息。这个应该是只读的。如果有帮助,当我填充此网格时(通过单击另一个网格上的选择按钮),调试器会在开始执行其他任何操作之前点击 Page_Load 两次。

标签: asp.net gridview user-controls paging gridview-sorting


【解决方案1】:

我很抱歉我粘贴在问题中的代码,虽然它的目的是正确的,但不是与这个问题相关的正确代码。也就是说,我要感谢 Icarus 抽出时间查看我的代码。

分页/排序工作。我所做的解决方法是将PageIndexChangingSorting 事件处理程序中对GetCampaignData() 的调用替换为为我提供所需结果所需的SQL 代码和数据绑定方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2012-03-14
    • 1970-01-01
    • 2015-03-20
    • 2016-07-30
    • 2011-07-26
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多