【问题标题】:populating a gridview with a button's click event使用按钮的单击事件填充网格视图
【发布时间】:2010-12-23 22:09:21
【问题描述】:

我的页面有两个下拉列表(一个用于位置,另一个用于部门)、一个员工搜索文本框和一个按钮。在另一页上,我有一个gridview。现在,我想要实现的是,当用户在文本框控件中键入员工姓名时,从位置下拉列表中选择一个位置,从部门下拉列表中选择一个部门,然后单击按钮(搜索),另一个上的网格视图页面必须显示单个员工的所需信息。只能显示一行。

我为员工创建了一个数据库。我知道如何使用自动回发来做到这一点,但我还没有尝试使用按钮单击。注意:gridview 应该只显示选定员工的一行。我正在使用 ASP.NET VB

您的帮助将不胜感激。

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    试试这个

    <asp:Button ID="srchButton" Text="BindData" runat="server" OnClick="BindData" />
    
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    
    protected void BindData(object sender, EventArgs e)
    {
        Gridview1.Datasource = YourDataSource;
        GridView1.DataBind()
    }
    

    【讨论】:

    • 谢谢潘迪亚。这看起来像一个 C# 代码。你有它的VB代码吗?
    • 嘿大卫,你只需要点击按钮中的两行
    • 只需分配您的数据源,然后在您的按钮单击中调用数据绑定方法
    【解决方案2】:

    好的,ASP.NET 中的跨页回发。我们开始吧。

    从您的搜索页面开始,我们将其称为 search.aspx - 这包含您的下拉列表、文本框和按钮。

    Employee Name: <asp:TextBox runat="server" ID="SearchTextBox" />
    <br />
    <asp:DropDownList runat="server" ID="LocationDropDownList">
        <asp:ListItem Text="Springfield" Value="Springfield" />
        <asp:ListItem Text="Shelbyville" Value="Shelbyville" />
    </asp:DropDownList>
    <br />
    <asp:DropDownList runat="server" ID="DepartmentDropDownList">
        <asp:ListItem Text="Nuclear Power" Value="Power" />
        <asp:ListItem Text="Dr. Frink's Lab" Value="Research" />
        <asp:ListItem Text="Mr. Burn's Office" Value="Management" />
    </asp:DropDownList>
    <br />
    <asp:Button runat="server" ID="SearchButton" Text="Search" PostBackUrl="~/SearchResults.aspx" />
    

    请注意,该按钮具有 PostBackUrl 属性 - 这是将请求发布到结果页面的原因。我们还需要更改 search.aspx.designer.vb,使下拉列表和文本框成为公共属性,不受保护。

    Public WithEvents SearchTextBox As Global.System.Web.UI.WebControls.TextBox
    

    结果页面,即 searchresults.aspx,上面有 GridView。

    <asp:gridview runat="server" id="SearchResultsGridView" />
    

    现在,如何处理代码中的跨页回发。在 searchresults.aspx 的 Page_Load 事件中,我们检查 PreviousPage 属性。 PreviousPage 可能是Nothing(例如,如果用户直接输入了 searchresults.aspx),所以如果是,我们将重定向回 search.aspx。如果PreviousPagesomething,那么我们可以检查IsCrossPagePostback 属性。如果这是真的,那么我们可能是从我们的 search.aspx 页面到这里的(这可能不是一个完全有效的假设,但它现在已经足够好了)。如果是这种情况,那么我们可以将 PreviousPage 强制转换为 search.aspx 的底层类,并且由于我们将下拉列表和文本框控件公开,因此我们可以在此处的代码中将它们作为属性进行访问。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        Dim employeeName As String
        Dim department As String
        Dim location As String
        Dim searchPage As Search
    
        If PreviousPage Is Nothing Then
            Response.Redirect("search.aspx")
        Else
            If PreviousPage.IsCrossPagePostBack Then
    
                searchPage = DirectCast(PreviousPage, Search)
    
                employeeName = searchPage.SearchTextBox.Text
                department = searchPage.DepartmentDropDownList.SelectedValue
                location = searchPage.LocationDropDownList.SelectedValue
    
                Call bindData(employeeName, department, location)
    
            End If
        End If
    
    End Sub
    
    Private Sub bindData(ByVal employeeName As String, ByVal locationName As String, ByVal departmentName As String)
    
        With searchResultsGridView
            .DataSource = 'Some code that passes the search parameters to the database
            .DataBind()
        End With
    
    End Sub
    

    关于搜索结果只显示一行的要求,请考虑是否可以在同一部门、同一地点有两个同名员工。这可能不太可能,但我认为这不是不可能的,我不确定你是否应该有一个不应该显示的限制。如果这是,比如说,一个工资系统,你最终可能会得到一个你永远无法通过 UI 获得的记录,所以你永远无法停止支付那个特定的员工 - 可能不是你想要的想要!

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多