好的,所以不清楚您是否需要一个例程来获取网格中的所有 URL,并更新每个站点/url 的最后更新?
或者您只想在单击按钮跳转到站点时更新站点?
两者都很容易做到。
我的意思是,假设我们有这个标记 - 放入一个网格视图(我让向导创建了它)。
然后我把datasoruce控件吹掉,然后从GV中去掉datasoruce ID设置
所以,我有这个标记:
<div style="padding:35px">
<asp:GridView ID="GridView1" runat="server" CssClass="table" Width="65%"
AutoGenerateColumns="False" DataKeyNames="ID" >
<Columns>
<asp:BoundField DataField="Url" HeaderText="Url" ItemStyle-Width="500" />
<asp:BoundField DataField="LastUpDated" HeaderText="Last UpDated" />
<asp:BoundField DataField="LastVisit" HeaderText="Last Visit" />
<asp:TemplateField HeaderText="View" ItemStyle-HorizontalAlign="Center" >
<ItemTemplate>
<asp:Button ID="cmdJump" runat="server" Text="View" CssClass="btn"
OnClick="cmdJump_Click"
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Button ID="cmdGetAll" runat="server" Text="Upate all Last updated" CssClass="btn" />
</div>
好的,我加载 gv 的代码是这样的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadGrid()
End If
End Sub
Sub LoadGrid()
Using conn = New SqlConnection(My.Settings.TEST4)
Using cmdSQL = New SqlCommand("SELECT * FROM tblSites", conn)
Dim rstData As New DataTable
conn.Open()
rstData.Load(cmdSQL.ExecuteReader)
GridView1.DataSource = rstData
GridView1.DataBind()
End Using
End Using
End Sub
现在我们有了这个:
好的,所以只需将飞机简按钮放入 GV。当我单击该按钮时,我将更新最后一次访问 - 不清楚您是否还希望它更新给定 url 的最后一次更新?
我们可以两者兼得。
那么,我们删除了一个简单的按钮?好吧,让它在我们上次访问(单击)跳转到该站点时更新)。
Protected Sub cmdJump_Click(sender As Object, e As EventArgs)
Dim cmdView As Button = sender
Dim gRow As GridViewRow = cmdView.NamingContainer
Dim PKID As Integer = GridView1.DataKeys(gRow.RowIndex).Item("ID")
' udpate with last visit click
Using conn = New SqlConnection(My.Settings.TEST4)
Using cmdSQL = New SqlCommand("update tblSites SET LastVisit = @Visit WHERE ID = @ID", conn)
conn.Open()
cmdSQL.Parameters.Add("@Visit", SqlDbType.DateTime).Value = Date.Now
cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = PKID
cmdSQL.ExecuteNonQuery()
End Using
End Using
' Now jump to that url
Response.Redirect(gRow.Cells(0).Text)
End Sub
用于获取和更新给定 URL 的所有最新更新(每一行)的按钮是这样的:
Protected Sub cmdGetAll_Click(sender As Object, e As EventArgs) Handles cmdGetAll.Click
Using conn = New SqlConnection(My.Settings.TEST4)
Using cmdSQL = New SqlCommand("SELECT * FROM tblSites", conn)
Dim rstData As New DataTable
conn.Open()
rstData.Load(cmdSQL.ExecuteReader)
For Each OneRow As DataRow In rstData.Rows
Dim client = New HttpClient()
Dim msg As New HttpRequestMessage(HttpMethod.Head, OneRow("Url").ToString)
Dim resp = client.SendAsync(msg).Result
Dim lastMod As DateTimeOffset? = resp.Content.Headers.LastModified
OneRow("LastUpDated") = lastMod.Value.ToString
Next
Dim da As New SqlDataAdapter(cmdSQL)
Dim daU As New SqlCommandBuilder(da)
da.Update(rstData)
' now re-load grid
LoadGrid()
End Using
End Using
End Sub
所以,上面有更新所有 URL 数据的代码。
但是,您的问题似乎表明,当您单击 GV 行按钮时,您还想使用来自网站 url 的最后更新信息获取/保存/更新 GV 的给定行?
好的,那么,我们修改我们的点击代码,既更新我们的最后一次点击访问,又得到那个网站的最后更新信息。
所以,只需将按钮单击行代码更改为:
Protected Sub cmdJump_Click(sender As Object, e As EventArgs)
Dim cmdView As Button = sender
Dim gRow As GridViewRow = cmdView.NamingContainer
Dim PKID As Integer = GridView1.DataKeys(gRow.RowIndex).Item("ID")
Dim client = New HttpClient()
Dim msg As New HttpRequestMessage(HttpMethod.Head, gRow.Cells(0).Text)
Dim resp = client.SendAsync(msg).Result
Dim lastMod As DateTime = resp.Content.Headers.LastModified.ToString
' udpate with last visit click, and also get laste update from web site
Using conn = New SqlConnection(My.Settings.TEST4)
Dim strSQL As String =
"update tblSites SET LastVisit = @Visit,LastUpdated = @LastUpDate WHERE ID = @ID"
Using cmdSQL = New SqlCommand(strSQL, conn)
conn.Open()
cmdSQL.Parameters.Add("@Visit", SqlDbType.DateTime).Value = Date.Now
cmdSQL.Parameters.Add("@LastUpDate", SqlDbType.DateTime).Value = lastMod
cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = PKID
cmdSQL.ExecuteNonQuery()
End Using
End Using
' Now jump to that url
Response.Redirect(gRow.Cells(0).Text)
End Sub
编辑:不使用 asp.net
我现在在您的帖子中看到您建议您不使用 asp.net。但是,如果您说使用 vb.net 桌面 + gridview,上述代码的工作方式几乎相同。换句话说,代码应该是相似的,其中包括获取该网站日期的代码。
所以,您需要使用跟随超链接,但代码是从网站获取日期,甚至是您的桌面通用表单布局。结果——即使你的网格看起来与上面的网页非常相似,这里的整体想法也同样适用于桌面或基于网络的网页。我的意思是,如果你安装了 Visual Studio,那么你可以在上面尝试 - 因为 VS 确实为你安装了 web 位和部件。
Edit #2 - 获取最后修改日期的代码。
没有一些进程启动,从不建议这样使用。因此,您需要的代码是这样的:
webPAGE = row.Cells(2).Value.ToString()
Dim client = New HttpClient()
Dim msg As New HttpRequestMessage(HttpMethod.Head,webPAGE)
Dim resp = client.SendAsync(msg).Result
Dim lastMod As DateTime = resp.Content.Headers.LastModified.ToString
MsgBox("DATE " & lastMod)
Edit#3:代码作为获胜表单
好的,所以我们创建一个空白的新窗体。
放入文本框,放入按钮。
我们有这个代码:
Imports System.Net.Http
Public Class GetURLdate1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim strURL As String
strURL = TextBox1.Text
Dim client = New HttpClient()
Dim msg As New HttpRequestMessage(HttpMethod.Head, strURL)
Dim resp = client.SendAsync(msg).Result
Dim strLastMod As String = resp.Content.Headers.LastModified.ToString
MsgBox("Last mod as string date" & vbCrLf & strLastMod)
Dim lastMod As DateTime = strLastMod
MsgBox(lastMod)
End Sub
Private Sub GetURLdate1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.Text =
"https://stackoverflow.com/questions/70825821/how-do-i-get-last-modified-date-of-website"
End Sub
所以,我用这个网页作为网址。
当我运行这个表单时——点击按钮,我看到了: