2
Sub Page_Load(...)
    If Not IsPostBack Then
        BindData()
    End If
    gvCustomers.AllowPaging = False
    BindData()
    lblResult.Text = gvCustomers.Rows.Count.ToString & " records found "
    gvCustomers.AllowPaging = True
    BindData()
End Sub

Protected Sub btnClear_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClear.Click
    ' Simple clean up text to return the Gridview to it's default state
    searchBox.Text = ""
    SearchString = ""
    BindData()
End Sub

然后在gridview标记上:

<asp:Label ID="lblResult" style ="font-weight:bold; " runat="server" 
     CssClass="style26"></asp:Label>
... another markup goes here ...
<asp:button ID="btnClear" Text="Reset" runat="server" />

我们想做的是在页面加载时在 gridview 上显示记录总数。就页面加载而言,这可以正常工作。当您搜索记录时,它会显示找到的正确记录数。

现在是问题部分。如果单击重置按钮控件,gridview 应默认返回记录总数。当您按一次重置按钮时,它不会重置为原始总数。

在页面重新加载 gridview 上的记录总数之前,您必须按两次重置按钮。

任何想法如何解决这个问题,以便在第一次按下重置按钮时重新加载?非常感谢提前

Private Sub BindData()
    Dim strSearch As String

    'Protect against SQL Injection
    strSearch = Replace(searchBox.Text, "'", "''", 1, -1, 1)

    Dim query As String = "SELECT r.RoleId,l.LoginId, l.fullname,l.UserName,r.UserRoles FROM tblLogin l Inner Join tblRoles r on l.rights = r.roleId WHERE l.fullname LIKE '%" & strSearch & "%' "
    Dim cmd As New SqlCommand(query)
    gvCustomers.DataSource = GetData(cmd)
    gvCustomers.DataBind()
End Sub
4

2 回答 2

0

我建议不要一次又一次地重新绑定您的数据源,而是调用 method dataBind()。因此,您首先在 gridView中设置记录数,然后重新绑定它以显示所有数据变得更加清晰!

我认为这是一个事件顺序问题。您单击的每个按钮都会返回到服务器并首先调用您的PageLoadeventHandler。之后你的btnClear_Click会被调用。

所以我希望我确实让你正确并建议以下代码:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        BindData()
    End If
    ' gvCustomers.AllowPaging = True ' I would set this in markup!!
End Sub

Protected Sub btnClear_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClear.Click
    ' Simple clean up text to return the Gridview to it's default state
    searchBox.Text = ""
    BindData()
End Sub

根据给定的细节重写答案!我假设GetData(cmd)返回一个数据表。如果我错了,请告诉我。

Sub BindData()
    ' use SQL-Parameter instead - see below
    Dim query As String = "SELECT r.RoleId,l.LoginId, l.fullname,l.UserName,r.UserRoles FROM tblLogin l Inner Join tblRoles r on l.rights = r.roleId WHERE l.fullname LIKE '%@searchText%' "

    Dim cmd As New SqlCommand(query)
    cmd.Parameters.Add("@searchText", SqlDbType.VarChar, 80).Value = searchBox.Text;

    Dim dt as DataTable
    dt = GetData(cmd)

    gvCustomers.DataSource = dt
    gvCustomers.DataBind()

    lblResult.Text = dt.Rows.Count.ToString & " records found "
End Sub

在此代码中,您BindData()将在 page_load 上调用一次,然后仅在您必须重新绑定数据时调用(例如:搜索、重置

于 2013-09-28T22:47:32.940 回答
0

为什么可以使用 Container.DataItemIndex

<asp:TemplateField HeaderText="Slno" Visible="false">
<ItemTemplate>
<div style="margin-top: 0px; color: Black;">
<asp:Label ID="txtslno" ForeColor="#000f9f" Font-Size="8" runat="server" Text='<%# Container.DataItemIndex+1 %>'></asp:Label>
</div>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" Width="30px" />
</asp:TemplateField>
于 2013-09-29T02:42:45.077 回答