【问题标题】:GridVIew has one Databind on page_load and another when a button is click. When on second Databind if pagenumber click goes to 1st DatabindGridVIew 在 page_load 上有一个 Databind,在单击按钮时有另一个。如果页面编号单击转到第一个数据绑定,则在第二个数据绑定上时
【发布时间】:2014-11-03 19:08:32
【问题描述】:

我有一个带有分页功能的 GridView,并在 Page_Load 上以编程方式对其进行数据绑定。我还有一个搜索按钮,当单击它时,它会绑定到不同的 sql 命令。如果您单击搜索按钮并检索多个页面,并且如果您单击第 2 页,它将检索第一个 Databind() 的数据。如何使用 GridView1.PageIndexChanging 解决这个问题,这是我在第一个 Databind 上用于分页的方法? Anyhelp将不胜感激。它甚至可能吗?

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" PageSize="100">
 <Columns>
    <asp:BoundField DataField="fldEmployeeID" HeaderText="EmployeeID" />
    <asp:BoundField DataField="fldAbsentDate" HeaderText="AbsentDate" />
    <asp:BoundField DataField="fldAbsentCode" HeaderText="AbsentCode" />
    <asp:BoundField DataField="fldRuleViolationWarningType" HeaderText="Rule Violation Warning" />
    <asp:BoundField DataField="fldRuleViolationIssueDate" HeaderText="Rule Violation Issue Date" />
    <asp:BoundField DataField="fldLOAEndDate" HeaderText="LOA End Date" />
</Columns>

</asp:GridView>

vb.net

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim SqlDataSource1 As SqlDataSource = New SqlDataSource()
    SqlDataSource1.ID = "SqlDataSource1"
    Page.Controls.Add(SqlDataSource1)
    SqlDataSource1.ConnectionString = "your connection string"
    'SqlDataSource1.SelectCommand = "SELECT * FROM [tblAbsences] WHERE [fldEmployeeID]=38"
    SqlDataSource1.SelectCommand = "SELECT * FROM [tblAbsences] ORDER BY [fldEmployeeID], [fldAbsentDate], [fldAbsentCode]"
    GridView1.DataSource = SqlDataSource1
    GridView1.DataBind()
End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    GridView1.PageIndex = e.NewPageIndex
    GridView1.DataBind()
End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim SqlDataSource2 As SqlDataSource = New SqlDataSource()
    SqlDataSource2.ID = "SqlDataSource2"
    Page.Controls.Add(SqlDataSource2)
    SqlDataSource2.ConnectionString = "your connection string"
    SqlDataSource2.SelectCommand = "SELECT * FROM [tblAbsences] WHERE [fldAbsentDate] BETWEEN '7-03-2014' AND '8-21-2014' ORDER BY [fldAbsentDate]"
    'SqlDataSource2.SelectCommand = "SELECT * FROM [tblAbsences] ORDER BY [fldEmployeeID], [fldAbsentDate], [fldAbsentCode]";
    GridView1.DataSource = SqlDataSource2
    GridView1.DataBind()

End Sub

【问题讨论】:

  • 当您使用 gridview 分页单击页码时,它会在回发期间触发页面加载事件。这会将 SqlDataSource 更改回 SqlDataSource1。您可以检查它是否正在回发,并告诉它除了 databind() 之外不要执行任何操作...但前提是您不打算在某个时候恢复到 SqlDataSource1。

标签: asp.net vb.net gridview data-binding


【解决方案1】:

在主表单中添加一个不可见的 html 标签/文本框...

<asp:label runat="Server" ID="SDS2" visible="false" text="0" />

页面加载如下所示,并且可能会受益于在同一 IF 语句的“else”子句中添加 SDS2。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If SDS2.Text = "0"
        Dim SqlDataSource1 As SqlDataSource = New SqlDataSource()
        SqlDataSource1.ID = "SqlDataSource1"
        Page.Controls.Add(SqlDataSource1)
        SqlDataSource1.ConnectionString = "your connection string"
        'SqlDataSource1.SelectCommand = "SELECT * FROM [tblAbsences] WHERE [fldEmployeeID]=38"
        SqlDataSource1.SelectCommand = "SELECT * FROM [tblAbsences] ORDER BY [fldEmployeeID],       [fldAbsentDate], [fldAbsentCode]"
        GridView1.DataSource = SqlDataSource1

        GridView1.DataBind()
    Else
        'Call the SDS2 stuff here
    End If
End Sub

并在您的按钮单击处理程序中添加此行以将其设置为使用 SDS2。

SDS2.Text = "1"

【讨论】:

  • 嘿 Zack 它没有检索到任何东西。就像 ViewGrid 消失了
  • 那么,当您加载页面时,初始的 gridview 什么都没有显示?
  • 其他选项是在 webform 中有一个隐藏元素(如隐藏标签或文本框)并为其分配一个值,用作在回发期间不将数据源更改为 SqlDataSource1 的标志,以及当您需要它恢复到 SDS1 只需将标签/文本框的值重置为默认值。我通常用“0”表示假,用“1”表示真。将用我的意思的例子编辑答案......
  • 不它没有,但如果你再次运行整个代码,它就可以工作。所以我所做的是使用 Session 创建一个标志,以了解 SqlDatasource2 是否已绑定。所以现在它可以工作了。但是我有问题:如果在 SQLDataSource1 上并单击 Page11 时单击按钮搜索,则分页保持为单击第 11 页。如何重新启动分页计数器
  • 你可以在你的按钮中放一行点击重置它。 GridView1.PageIndex = 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多