我有一个填充了一些Names的datagridview,我想用datagridview中的Names检查另一个数据库中的所有Name,并在找到匹配时将Surnames添加到相邻的单元格,这是我通过字符串实现的比较方法。
我的问题是由于输入不一致而导致的问题。有时两个人姓名相同,有些名字没有被正确判断。
我想要的是让用户选择选择他们认为最匹配的Datagridview中的一个名称,或同时输入First Name&姓氏在一个新的行。为了实现这一点,我希望程序等到用户点击datagridview中的一行。
有没有办法等到这个效果?
由于 JHON
答案 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声明为全局变量,但是仍然使用函数声明。 干杯