我目前有一個填充了摘要資料的網格視圖。我已經從標記為 的系結欄位創建了一個超鏈接ticket_num。我想要完成的是單擊超鏈接并呼叫存盤程序。我需要將該超鏈接的文本傳遞到 SQL Server 中的存盤程序中。所以流程是這樣的......
- 用戶點擊鏈接
- 該超鏈接的文本被傳遞到 SQL Server 存盤程序要使用的引數中
- 呼叫存盤程序并在新頁面上顯示結果
有任何想法嗎?創建存盤程序,創建通過 ASP.NET 到服務器的連接。到目前為止一切正常,但我無法弄清楚這一點。
uj5u.com熱心網友回復:
好吧,既然你想執行一些代碼,那么使用超鏈接的理由不大,因為那不是你需要的,也不是你想要的。
您沒有提到您是否更喜歡“隱藏” URL 和超鏈接?(通常出于安全考慮,這并不是一個壞主意)。
所以,如果你需要隱藏/不顯示/不想要網格中的值,那么我們簡單的按鈕點擊就可以獲取網格的行id(也是隱藏的),然后獲取值,然后傳遞給sql服務器。
或者,您可以將 URL 或值添加到按鈕 - 只需使用命令引數。這樣您就不必根據行 PK id 再次訪問資料庫。
所以,這是一個簡單的網格。我將 URL 作為網格上的一行,但我們也可以將其推入/放入按鈕中,以便您查看它是如何作業的。
所以,簡單的網格:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" CssClass="table" >
<Columns>
<asp:BoundField DataField="Fighter" HeaderText="Fighter" />
<asp:BoundField DataField="Engine" HeaderText="Engine" />
<asp:BoundField DataField="Thrust" HeaderText="Thrust" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="Preview">
<ItemTemplate>
<asp:Image ID="Image2" runat="server" ImageUrl = '<%# Eval("ImagePath") %>' Width="140" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:Button ID="cmdView" runat="server" Text="View" CssClass="btn"
CommandArgument = '<%# Eval("ImagePath") %>' OnClick="cmdView_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
以及我們加載上述內容的代碼:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadGridF()
End If
End Sub
Sub LoadGridF()
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand("SELECT * FROM Fighters", conn)
conn.Open()
Dim rstData = New DataTable
rstData.Load(cmdSQL.ExecuteReader)
GridView1.DataSource = rstData
GridView1.DataBind()
End Using
End Using
End Sub
現在我們有了這個:

注意我們有一個 PLAIN JANE 按鈕——畢竟,它不是我們真正需要的超鏈接,是嗎?
所以,對于我們的按鈕點擊事件,我們有這個:
Protected Sub cmdView_Click(sender As Object, e As EventArgs)
Dim btn As Button = sender
Dim gRow As GridViewRow = btn.NamingContainer
Debug.Print("Row index click = " & gRow.RowIndex)
' get database row PK id
Dim iPK As Integer = GridView1.DataKeys(gRow.RowIndex).Item("ID")
' now we have database row PK - walk the dog, do payroll processing
' do ANYTHING we want like get the database row etc.
Debug.Print("Data base row PK id = " & iPK)
Debug.Print("Command button arugment = " & btn.CommandArgument)
End Sub
然后輸出是:

所以,你可以看到,我們不需要(或想要一個超鏈接),而是一個簡單的按鈕,并且那個點擊事件可以:
get any value from the given grid row
get the database PK id (hidden - never exposed to client side (good security).
get the row click index
get parameters passed to button
我們可以使用 gRows.Cells() 來獲取其他行值(用于資料欄位)
當然 gRow.FindControl("ctrl name") 用于模板列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/487009.html
上一篇:更新重復列的位置
