如何在网格视图中筛选数据/连接

3

作为一项任务的一部分,我正在制作一个订购网站。医生登录后可以看到他的患者提交的所有订单。当医生选中某些复选框并点击按钮时,被选中的复选框会更新订单(行)列(批准)为已批准状态。未选中的复选框会将批准列更新为未批准 - 所有这些都可以正常工作和更新 ...

然而,此后网格并不会消失 - 医生仍然可以继续更新订单并更改它们,但我希望只显示尚未被选中/取消选中的新订单。- 我不知道如何在我的vb代码中应用此功能。

我不希望订单从数据库订单表中删除 - 只是向医生呈现尚未检查/未选择的新订单。

我的网格:

    <asp:GridView ID="GridViewdoc" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderId">
     <Columns>
  <asp:BoundField DataField="OrderID" HeaderText="Order Id" />
  <asp:BoundField DataField="DoctorId" HeaderText="Doctor Id" />
  <asp:BoundField DataField="Forename" HeaderText="Forename" />
  <asp:BoundField DataField="Surname" HeaderText="Surname" />
  <asp:BoundField DataField="MedicineId" HeaderText="Medicine Id" />
  <asp:BoundField DataField="MedicineName" HeaderText="Medicine Name" />
  <asp:BoundField DataField="pharmname" HeaderText="Pharmacy Name" />
  <asp:BoundField DataField="Dateordered" HeaderText="Date Ordered" />
  <asp:TemplateField HeaderText="Approve Status"> 
  <ItemTemplate> 
    <asp:CheckBox   ID="ApproveBox" runat="server"  /> 
  </ItemTemplate> 
   </asp:TemplateField>
     </Columns>
 </asp:GridView>

我的代码背后的gid:

Imports System.Data.SqlClient

导入System.Data

部分类Pages_docorders 继承自System.Web.UI.Page

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Dim conn As New System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\surgerydb.mdf;Integrated Security=True;Connect Timeout=30")
        Dim cmd3string As String = " Select * From docgridview  WHERE DoctorId = " & Session("DoctorId")
        Dim dt As New System.Data.DataTable()
        Dim da As New System.Data.SqlClient.SqlDataAdapter(cmd3string, conn)
        conn.Open()
        da.Fill(dt)
        conn.Close()



        GridViewdoc.DataSource = dt
        GridViewdoc.DataBind()

    End If

End Sub

Protected Sub GridViewdoc_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewdoc.RowDataBound


    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim drview As DataRowView = TryCast(e.Row.DataItem, DataRowView)

        'Find checkbox and checked/Unchecked based on values
        Dim chkb As CheckBox = DirectCast(e.Row.FindControl("ApproveBox"), CheckBox)
        If drview(8).ToString() = "Approve" Then
            chkb.Checked = True
        Else
        End If
    End If

End Sub
Protected Sub btnapprove_Click(sender As Object, e As System.EventArgs) Handles btnapprove.Click
    Dim dt As Data.DataTable = Session("Approved")
    Dim val As String
    val = ""
    Dim Oid As Integer
    Dim conn As New System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\surgerydb.mdf;Integrated Security=True;Connect Timeout=30")

    For Each row As GridViewRow In GridViewdoc.Rows
        Dim therowindex As Integer = row.RowIndex
        Oid = Integer.Parse(GridViewdoc.DataKeys(therowindex).Value.ToString())
        val = ""
        Dim cb As CheckBox = row.FindControl("ApproveBox")
        If cb.Checked Then

            val = "Approved"
        Else

            val = "Disapproved"
        End If
        If Oid > 0 Then
            Dim cmdstring As String = " UPDATE Order_pres SET Approved = @appr  Where OrderID= @oid"
            conn.Close()
            conn.Open()
            Dim cmd = New SqlCommand(cmdstring, conn)
            cmd.Parameters.Add("@appr", Data.SqlDbType.NVarChar).Value = val
            cmd.Parameters.Add("@oid", Data.SqlDbType.NVarChar).Value = Oid
            Dim result As Integer
            result = cmd.ExecuteNonQuery()

        End If
    Next

    Dim cmd3string As String = " Select * From docgridview  WHERE DoctorId = " & Session("DoctorId")
    Dim dtm As New System.Data.DataTable()
    Dim da As New System.Data.SqlClient.SqlDataAdapter(cmd3string, conn)
    conn.Close()
    conn.Open()
    da.Fill(dtm)
    conn.Close()
    GridViewdoc.DataSource = dtm
    GridViewdoc.DataBind()
End Sub

结束类

希望有人能帮忙 - 谢谢 :)


标题说你想隐藏GridView,但实际上你想筛选它的内容。这是正确的吗? - ConnorsFan
你好 @ConnorsFan!确实,这就是我想要做的。 - laurajs
@ConorsFan - 我已经编辑了标题,你知道怎么做吗? - laurajs
1个回答

1
如果在 Order_presApproved 字段为 NULL,则表示还未对订单进行批准决策,您可以尝试以下操作:
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        BindGridViewData()
    End If
End Sub

Protected Sub btnapprove_Click(sender As Object, e As System.EventArgs) Handles btnapprove.Click
    ...
    For Each row As GridViewRow In GridViewdoc.Rows
        ...
    Next
    BindGridViewData()
End Sub

Protected Sub BindGridViewData()
    Using conn As New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\surgerydb.mdf;Integrated Security=True;Connect Timeout=30")
        Using cmd As New SqlCommand("SELECT DGV.* FROM docgridview DGV INNER JOIN Order_pres OP ON OP.OrderID = DGV.OrderID WHERE DGV.DoctorId = @DoctorId AND OP.Approved IS NULL", conn)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add(New SqlParameter("@DoctorId", Session("DoctorId")))
            Dim dataAdapter As New SqlDataAdapter(cmd)
            Dim dtm As New DataTable()
            dataAdapter.Fill(dtm)
            GridViewdoc.DataSource = dtm.DefaultView
            GridViewdoc.DataBind()
        End Using
    End Using
End Sub

该查询查找docgridview中的记录,其中Order_pres中对应的记录尚未批准或驳回。

注意:上述代码假定您的VB代码文件顶部存在以下行:

Imports System.Data
Imports System.Data.SqlClient

嗨@ConnorsFan!感谢您的回答 - 我已经更新了问题中所有的代码文件,请问您可以告诉我那部分应该放在哪里吗 :) - laurajs
这个可以运行 - 当按钮被点击时,网格消失了 - 但是当我重新加载页面/再次登录时,它会重新出现。有没有办法只显示像新的订单(还没有被检查过),但它们仍然留在订单表上? - laurajs
这个查询语句是否能够正常工作 - select * from order_pres where Approved = "" or null ? - laurajs
你说:“这个可以用——网格消失了。” 你希望在重新加载页面时也能实现相同的效果吗? - ConnorsFan
每次登录时,订单已处理的人员不应该看到已处理的订单,但订单本身会消失 - 这个能做到吗? - laurajs
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接