2009-12-07 33 views
0

我有一個頁面有兩個下拉列表(一個用於位置,另一個用於部門),一個員工搜索文本框和一個按鈕。在另一頁上,我有一個gridview。現在,我想要實現的是,當用戶在文本框控件中輸入員工姓名時,從位置下拉列表中選擇一個位置,並從部門下拉列表中選擇一個部門,然後單擊按鈕(搜索),另一個網格視圖頁面必須顯示SINGLE員工所需的信息。只有一行必須顯示。用按鈕的單擊事件填充gridview

我爲員工創建了一個數據庫。我知道如何用autopostback做到這一點,但我沒有嘗試過使用按鈕的點擊。注意:gridview應該只顯示選定員工的一行。我正在使用ASP.NET VB

您的幫助將高度讚賞。

回答

0

嘗試在ASP.NET這個

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

謝謝Pandiya。儘管這看起來像一個C#代碼。你有一個VB代碼嗎? – 2011-01-14 16:48:38

+0

嘿大衛, 你只需要在你的按鈕點擊兩行 – 2011-01-14 16:48:38

+0

只需指定您的數據源,然後在您的按鈕點擊調用數據綁定方法 – 2011-01-14 16:48:38

0

OK,跨頁回發。開始了。

從您的搜索頁面開始,我們將其稱爲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 

至於您的要求,搜索結果只顯示單行,考慮是不是有可能有兩個員工具有相同的名稱,在同一個部門,在同一位置。這可能不太可能,但我認爲這是不可能的,我不確定你應該有一個限制,你不應該顯示它。如果這是一個工資系統,那麼最終可能會有一個你永遠無法通過用戶界面獲得的記錄,所以你永遠無法停止支付該特定的員工 - 可能不是你想要的想!