如何等待用户选择其中一个datagridview行?

时间:2010-03-17 20:09:01

标签: datagridview click wait

我有一个填充了一些Names的datagridview,我想用datagridview中的Names检查另一个数据库中的所有Name,并在找到匹配时将Surnames添加到相邻的单元格,这是我通过字符串实现的比较方法。

我的问题是由于输入不一致而导致的问题。有时两个人姓名相同,有些名字没有被正确判断。

我想要的是让用户选择选择他们认为最匹配的Datagridview中的一个名称,或同时输入First Name&姓氏在一个新的行。为了实现这一点,我希望程序等到用户点击datagridview中的一行。

有没有办法等到这个效果?

由于 JHON

3 个答案:

答案 0 :(得分:0)

我有点找到一个解决方法这个问题我不确定它是否是更好的之一,所以想知道更好的方法

    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

答案 1 :(得分:0)

我在这里遗漏了什么,或者你不想对DataGridView.Click事件作出反应?然后,您可以使用DataGridView.SelectedRows来确保选择了一行,并使用所选行执行所需的操作。

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

End Sub

希望这有帮助

干杯

答案 2 :(得分:0)

那就是我正在做的事情,但我正在使用它作为一个函数,因为我希望它返回gFlag值。后来我决定将gFlag声明为全局变量,但是仍然使用函数声明。 干杯