Как ждать, пока пользователь выберет одну из строк таблицы данных? - PullRequest
0 голосов
/ 17 марта 2010

У меня есть сетка данных, заполненная некоторыми Именами, я хочу выполнить проверку всех Имен в другой базе данных с Именами в сетке данных и добавить фамилии в соседнюю ячейку, когда совпадение найдено, этого я достигаю с помощью строки метод сравнения.

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

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

Есть ли способ подождать с этим эффектом?

Спасибо Jhon

Ответы [ 3 ]

0 голосов
/ 18 марта 2010

Я что-то здесь упускаю или вы не хотите реагировать на событие DataGridView.Click? Затем вы можете использовать DataGridView.SelectedRows, чтобы убедиться, что выбрана строка, и делать то, что вы хотите, с выбранными строками.

Private Sub DataGridView1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView.Click

End Sub

Надеюсь, это поможет

Приветствия

0 голосов
/ 18 марта 2010

Ну, это то, что я делаю, но я использую это как функцию, так как я хотел, чтобы она возвращала значение gFlag. Позже я решил объявить gFlag глобальной переменной, но сохранил объявление функции. Приветствия

0 голосов
/ 18 марта 2010

Ну, я нашел способ обойти эту проблему, я не уверен, если она одна из лучших, поэтому хотел бы узнать какой-нибудь лучший способ

    Dim gFlag As Boolean = False
Function MakeChoice(ByVal Name As String, ByVal i As Integer)

    Dim flag As Boolean
    Dim C1, C2 As MsgBoxResult
    Dim msg As String = "Select a row and press Ok to add a value to that row " & _
                        "Or Press cancel to Add a New Row"

    'Displays and Records Users Input
    C1 = MessageBox.Show(msg, Name, MessageBoxButtons.OKCancel)

    Select Case C1

        'If user wants to choose one of the rows in datagridview
        Case MsgBoxResult.Ok
            flag = True

            'Scrolls to the row with closest match
            dgv1.FirstDisplayedScrollingRowIndex = i
            dgv1.Focus()

            'Waits for gFlag to be True
            Do
                If gFlag = True Then
                    Exit Do
                End If
            Loop

            'Resets gflag to previous state ie; False in case this function
            'is accessed recursively
            gFlag = False

            'Finds the index of selected Row
            i = dgv1.CurrentRow.Index

            'Displays the message just to make sure user has chosen a right row just-in-case
            C2 = MsgBox("Are you sure that """ & Name & """ is same as  """ & dgv1.Rows(i).Cells(1).Value _
               & "", MsgBoxStyle.OkCancel)
            Select Case C2

                'If user confirms then return flag to be true and hence _
                'add the value in the selected row of datagridview
                Case MsgBoxResult.Ok
                    flag = True

                    'If selected row is not same as the desired row then go through a recursive
                    'Loop
                Case MsgBoxResult.Cancel
                    flag = MakeChoice(Name, i)
            End Select

            'If C1 = Cancel then add set flag to False ie add the value to a new row
        Case MsgBoxResult.Cancel
            flag = False

    End Select

    Return flag
End Function

Function GridClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv1.Click
    'I think this part is self explanatory
    gFlag = False
    If sender.ToString = "System.Windows.Forms.DataGridView" Then
        gFlag = True
    End If
    Return gFlag
End Function

Надеюсь, это кому-то поможет, хотя в ретроспективе это не было такой большой проблемой, я думаю. Будет искать любые предложения, чтобы сделать его лучше. Спасибо Jhon

...