I want to double click the "Name" column of the datagridview then it appears in webview2 based on the "url" column.
Thanks
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler Me.Resize, AddressOf Form_Resize
AddHandler WebView.NavigationStarting, AddressOf EnsureHttps
InitializeAsync()
Dim t As New DataTable()
t.Columns.Add("id")
t.Columns.Add("Name")
t.Columns.Add("url")
t.Rows.Add(New Object() {"1", "Philips APAC Centre", "https://www.google.com/search?tbs=lf:1,lf_ui:4&tbm=lcl&q=philips+singapore&rflfq=1&num=10&rldimm=6082032048092871869&ved=2ahUKEwjAuLeM2un-AhWAzzgGHe7qDswQu9QIegQIRhAL#rlfi=hd:;si:3450890534334536328,l,ChFwaGlsaXBzIHNpbmdhcG9yZSIDiAEBSN_D87CqroCACFojEAAYABgBIhFwaGlsaXBzIHNpbmdhcG9yZSoECAIQADICZW6SARZjb25zdW1lcl9hZHZpY2VfY2VudGVyqgFVCgwvZy8xeW16enJzbGQQASoLIgdwaGlsaXBzKAAyHxABIhspDALHL2gj5FH_XQXCrrvZukYbjrVUmSjB-CYyFRACIhFwaGlsaXBzIHNpbmdhcG9yZQ;mv:[[1.4505105,103.89954859999999],[1.2679569,103.79753199999999]]"})
t.Rows.Add(New Object() {"2", "Philips Lighting (Light Lab)", "https://www.google.com/search?tbs=lf:1,lf_ui:4&tbm=lcl&q=philips+singapore&rflfq=1&num=10&rldimm=6082032048092871869&ved=2ahUKEwjAuLeM2un-AhWAzzgGHe7qDswQu9QIegQIRhAL#rlfi=hd:;si:6082032048092871869,l,ChFwaGlsaXBzIHNpbmdhcG9yZSIDiAEBSL-c_5rngICACFojEAAYABgBIhFwaGlsaXBzIHNpbmdhcG9yZSoECAIQADICZW6SARVsaWdodGluZ19tYW51ZmFjdHVyZXKqAVUKDC9nLzF5bXp6cnNsZBABKgsiB3BoaWxpcHMoADIfEAEiGykMAscvaCPkUf9dBcKuu9m6RhuOtVSZKMH4JjIVEAIiEXBoaWxpcHMgc2luZ2Fwb3Jl;mv:[[1.4505105,103.89954859999999],[1.2679569,103.79753199999999]]"})
DataGridView1.DataSource = t
DataGridView1.Columns("url").Visible = False
End Sub
Private Sub Form_Resize(ByVal sender As Object, ByVal e As EventArgs)
WebView.Size = Me.ClientSize - New System.Drawing.Size(WebView.Location)
End Sub
Private Sub EnsureHttps(ByVal sender As Object, ByVal args As CoreWebView2NavigationStartingEventArgs)
Dim uri As String = args.Uri
If Not uri.StartsWith("https://") Then
WebView.CoreWebView2.ExecuteScriptAsync($"alert('{url} is not safe, try an https link')")
args.Cancel = True
End If
End Sub
Private Async Sub InitializeAsync()
Await WebView.EnsureCoreWebView2Async(Nothing)
Await WebView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("window.chrome.webview.postMessage(window.document.URL);")
End Sub
My advice would be to add the columns you want in grid in the designer. Add a text box column for
idand a link column forName, then setAutoGenerateColumnstoFalsein code so no extra columns are generated. Note that you need to set theDataPropertyNameof each column so it knows how to bind to the data source. You can then handle theCellContentClickevent of the grid and maths the column index to the index of the link column.I would also suggest that you add a
BindingSourcein the designer and then bind yourDataTablevia that. You can then get the current record from itsCurrentproperty.and: