在网格视图中归档已检查的记录(在数据库中将0更改为1)

时间:2012-11-05 15:44:47

标签: asp.net .net sql sql-server vb.net

我有一个网格视图,它可以提取存储过程所指示的数据。

screen shot 1

存储过程称为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>

2 个答案:

答案 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值放入表变量中以使用