Как использовать две формы для поиска в одной и отображения записей в другой с помощью Visual Basic 2010, SQL Server 2008 - PullRequest
1 голос
/ 19 января 2012

У меня есть 2 формы в моем проекте Visual Basic 2010.Оба связаны с сервером SQL 2008, где я веду базу данных с записями клиентов (имя, фамилия, адрес и т. Д.).

Что я хочу сделать, это дать определенные критерии в первой форме, скажем, имяи нажмите кнопку поиска.Программа должна искать в БД, если указанное имя существует. Если оно существует, я хочу показать результаты во второй форме.Под результатами я подразумеваю имя, фамилию, адрес и т. Д.Если он не существует, я хочу предложить пользователю вставить данные в БД.

Проблема в том, что я знаю, как выполнить эту работу в одной форме, но не как заставить эти две формы "общаться"друг с другом (имеется в виду, что один выполняет поиск, а другой - добавление проекции).

Любая помощь приветствуется

Редактировать

Извините, ребята, но я не могудогадаться.Я попытался установить фильтры, но все, что я получаю, это ошибки.Я буду публиковать все, что я написал до сих пор на случай, если кто-то может мне помочь.Так и здесь.Как я уже говорил ранее, я знаю, как искать данные в единой форме (назовем это DisplayForm).Как отметил Оливье, у меня есть текстовые поля для записей, поле со списком критериев поиска (имя, фамилия, идентификатор) и кнопка поиска, которая выполняет поиск и заполняет текстовые поля.Код для кнопки поиска выглядит следующим образом:

Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click

    Dim intPosition As Integer


   'Combo box code
    Select Case cboField.SelectedIndex
        Case 0 
            ObjDataView.Sort = "surname"
        Case 1 
            ObjDataView.Sort = "id"
    End Select


    If cboField.SelectedIndex = 0 Then

        intPosition = ObjDataView.Find(txtSearch.Text)
    ElseIf cboField.SelectedIndex = 1 Then

        intPosition = ObjDataView.Find(CType(txtSearch.Text, Integer))
    End If


    If intPosition = -1 Then
        MessageBox.Show("No customer found", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning)
    Else
        objCurrencyManager.Position = intPosition

    End If
End Sub

Я хочу, чтобы эта процедура была выполнена во второй форме (назовем ее FormSearch) и заполнил текстовые поля в форме DisplayForm.Я знаю, что это достаточно легко для кого-то, кто знает VB, но я совершенно новичок и отчаянно нуждаюсь в помощи.Большое спасибо за любые советы

1 Ответ

2 голосов
/ 19 января 2012

В вашей форме отображения добавьте этот код

Public Sub SetFilter(name as String)
   ' Set the filter here
End Sub

В вашей форме фильтра сделайте это

DirectCast(Application.OpenForms(0), DisplayForm).SetFilter(NameTextBox.Text)

Здесь я предполагаю, что DisplayForm является вашей основной формой и что ее имя DisplayForm.Вы могли бы вызвать это, например, при помощи события нажатия кнопки.


РЕДАКТИРОВАТЬ в ответ на комментарий:

Вы сказали, что знаете, как это сделать.на одной форме.Я не знаю, как вы это делаете, но, вероятно, у вас есть текстовые поля для имени, адреса и т. Д., Которые вы ищете.Затем, вероятно, вы нажимаете кнопку с именем btnSearch.Нажав эту кнопку, вы активируете

Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch_Click.Click
     ' The search logic goes here
End Sub

. Я говорю вам о том, чтобы заменить btnSearch_Click на Public Sub SetFilter(name as String), который является открытым.Вы бы переместили эти поля поиска и кнопку во вторую форму и оттуда позвоните SetFilter из первой формы, чтобы связаться с ней и сказать ей, чтобы искать клиента.В моем примере я передаю только имя, но я оставил вам право передавать больше параметров по мере необходимости.

Предполагая, что ваша форма клиента называется "DisplayForm", вы можете получить к ней доступ, например:

Dim cust As DisplayForm
cust = DirectCast(Application.OpenForms("DisplayForm"), DisplayForm)
cust.SetFilter(NameTextBox.Text)

Мой ответ был только о связи между двумя формами, предполагая, что вы уже управляли другой частью.


Поиск " Учебное пособие по VB.NET: Работа с данными "на YouTube приводит шесть видеороликов на эту тему.Видео № 3, в частности, показывает, как использовать фильтры.


EDIT # 2 .Вот еще немного помощи:

Я не знаю, как вы открываете две формы.Так как вам нужна ссылка на форму отображения в форме поиска, проще открыть форму поиска в качестве основной формы при запуске приложения.На Form_Load в форме поиска вы затем открываете форму отображения с помощью кода

Код в форме поиска :

' Reference to the display form
Private _displayForm As DisplayForm

' Create the display form and open it
Private Sub SearchForm_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    _displayForm = New DisplayForm()
    _displayForm.Show()
End Sub

' Get the search parameters and tell the display form to set the filter
Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click
    Dim field As String, search As Object

    Select Case cboField.SelectedIndex
        Case 0
            field = "surname"
            search = txtSearch.Text
        Case 1
            Dim n As Integer

            field = "id"
            If Integer.TryParse(txtSearch.Text, n) Then
                search = n
            Else
                MessageBox.Show("Please enter a number for id search", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning)
                Return
            End IF
    End Select
    _displayForm.SetFilter(field, search)
End Sub

Код в форме отображения , который фактически выполняет сортировку и поиск:

Public Sub SetFilter(ByVal field As String, ByVal search As Object)
    Dim intPosition As Integer

    ObjDataView.Sort = field
    intPosition = ObjDataView.Find(search)
    If intPosition = -1 Then
        MessageBox.Show("No customer found", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning)
    Else
        objCurrencyManager.Position = intPosition
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...