使用按钮的单击事件填充gridview

时间:2009-12-07 07:24:20

标签: asp.net vb.net gridview

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

我为员工创建了一个数据库。我知道如何使用autopostback执行此操作,但我没有尝试使用按钮的单击。注意:gridview应该只显示所选员工的一行。我正在使用ASP.NET VB

您的帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

试试这个

<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()
}

答案 1 :(得分:0)

好的,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。如果PreviousPage 某事,那么我们可以检查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

至于您要求搜索结果只显示一行,请考虑是否可以在同一位置的同一位置拥有两名具有相同名称的员工。这可能不太可能,但我不认为这是不可能的,我不确定你是否应该有一个限制,你不应该显示它。如果这是一个工资单系统,你最终可能会得到一个你永远无法通过用户界面获得的记录,所以你永远无法停止支付那个特定的员工 - 可能不是你想要的想!