我有一个网格视图,它可以提取存储过程所指示的数据。
存储过程称为GetEverything。 该声明由2个表格中的信息组成,一个表格包含人员详细信息,另一个表格包含船只详细信息。存储过程select语句包含以下Where子句:
WHERE Vessel.ArchiveStatus = 0
默认情况下,使用前端应用程序创建的每个新记录在db中都为ArchiveStatus赋予“0”。
因此,gridview只显示ArchiveStatus为0的记录,默认情况下是evertything。
2个方框,全部检查和取消全部检查完全正常工作。
我现在需要的是当选择REF或REF并单击“归档记录”按钮时,数据库中的0将更新为该VesselREF的1。
anoyone可以建议如何执行此操作,并为我提供一些示例代码,以放入存档记录按钮的Default.aspx.vb文件/事件处理程序。
有了这个位置,网格视图将只显示非存档记录,我可以使用自己的SQL创建一个单独的网格视图,以便通过存档记录。
GridView.aspx
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="REF,VesselREF" DataSourceID="SqlDataSource1" Height="132px"
style="text-align: center; font-family: Calibri; font-size: medium"
Width="508px" BackColor="#C4FFC4">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="REF" InsertVisible="False" SortExpression="REF">
<ItemTemplate>
<a href="Details.aspx?REF=<%# Eval("REF")%>"><%# Eval("REF")%></a>
<asp:CheckBox ID="RecordSelector" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="FirstName" HeaderText="FirstName"
SortExpression="FirstName" />
<asp:BoundField DataField="Surname" HeaderText="Surname"
SortExpression="Surname" />
<asp:BoundField DataField="VesselName" HeaderText="VesselName"
SortExpression="VesselName" />
<asp:BoundField DataField="VesselREF" HeaderText="VesselREF"
InsertVisible="False" ReadOnly="True" SortExpression="VesselREF" />
</Columns>
</asp:GridView>
答案 0 :(得分:2)
假设您正在使用TemplateFields
,并且您希望使用存储过程来设置两种存档状态:
Protected Sub btnArchive_Clicked(sender As Object, e As EventArgs)Handles btnArchive.Clicked
For Each row As GridViewRow In GridView1.Rows
Dim chk As CheckBox = DirectCast(row.FindControl("ChkRef"), CheckBox)
If (chk.Checked) Then
Dim refID As Integer = Integer.Parse(row.Cells(5).Text)
ArchiveRecord(refID, True)
End If
Next
End Sub
Public Shared Sub ArchiveRecord(refID As Integer, archive As Boolean)
Using con = New SqlConnection(My.Settings.MyConnectionString)
Using cmd = New SqlCommand("StoredProcedureName", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@RefID", refID)
cmd.Parameters.AddWithValue("@Archive", archive)
con.Open()
Dim affectedrecordCount As Integer = cmd.ExecuteNonQuery()
End Using
End Using
End Sub
答案 1 :(得分:1)
您需要使用GridView.DataKeys属性并存储每个DataKey的行ID值。 然后,当您更新时,通过GridViewRows枚举并使用FindControl来定位CheckBox。然后检查是否选中了该框,如果是,则连接到字符串...
' on update_pressed()...
Dim Ids as new StringBuilder()
For each gvr as gridViewRow in myGv.Rows
Dim cbx as CheckBox = gvr.FindControl("myCheckBoxID")
if cbx.Checked Then
Ids.Append(gvr.DataKeys(gvr.RowIndex).Value.ToString & ",")
End If
End For
' Ids now contains "5,6,87,356,2355," etc
然后,您可以使用SQL CSV到表变量函数将Id值放入表变量中以使用