заполнение gridview с событием нажатия кнопки - PullRequest
0 голосов
/ 07 декабря 2009

У меня есть страница с двумя выпадающими списками (один для местоположений, а другой для отделов), текстовое поле поиска сотрудников и кнопка. На другой странице у меня есть сетка. Теперь я хочу добиться того, чтобы, когда пользователь вводил имя сотрудника в элемент управления textbox, выбирал местоположение из раскрывающегося списка местоположений и отдел из раскрывающегося списка отделов и нажимал кнопку (поиск), вид сетки на другой На странице должна отображаться необходимая информация ОДНОГО сотрудника. Должна отображаться только одна строка.

Я создал базу данных для сотрудников. Я знаю, как сделать это с автостопом, но я не пробовал это с помощью нажатия кнопки. NB: вид сетки должен показывать только одну строку выбранного сотрудника. Я использую ASP.NET VB

Ваша помощь будет высоко оценена.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2009

ОК, постбэки между страницами в 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" />

Теперь, как обрабатывать постбэк в коде. В событии Page_Load для searchresults.aspx мы проверяем свойство PreviousPage. PreviousPage может быть Nothing (если, скажем, пользователь набрал непосредственно в searchresults.aspx), так что если это так, мы перенаправим обратно на search.aspx. Если PreviousPage равно что-то , то мы можем проверить свойство IsCrossPagePostback. Если это правда, то мы, вероятно, попали сюда со страницы search.aspx (это может быть не полностью допустимое предположение, но на данный момент этого достаточно). Если это так, то мы можем привести PreviousPage к базовому классу search.aspx, и, поскольку мы сделали общедоступными элементы управления dropdownlist и textbox, мы можем получить к ним доступ в качестве свойств в нашем коде.

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

Что касается вашего требования, что результаты поиска должны показывать только одну строку, подумайте, возможно ли иметь двух сотрудников с одинаковым именем в одном отделе в одном месте. Это может быть маловероятно, но я не думаю, что это невозможно, и я не уверен, что у вас должно быть ограничение, что вы не должны показывать это. Если бы это была, скажем, система начисления заработной платы, у вас могла бы получиться запись, которую вы никогда бы не смогли получить через пользовательский интерфейс, поэтому вы бы никогда не смогли перестать платить этому конкретному сотруднику - возможно, не так, как вы хочет!

0 голосов
/ 07 декабря 2009

Попробуйте это

<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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...