asp.net - 如何在 GridView 上过滤数据/连接

标签 asp.net vb.net visual-studio

我正在制作一个订购网站作为作业的一部分。医生登录并查看他的病人提出的所有命令。当医生单击某些复选框并单击按钮时 - 选中的框会将订单(行)列(批准)更新为已批准。未选中的框将批准列更新为不批准 - 这一切都有效并更新......

但是此后网格不会消失 - 医生可以继续更新订单并更改它们,但我只希望出现尚未选中/未选中的新订单。 - 我不知道如何将它应用到我的 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

导入系统数据

部分类页面_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

下课

希望有人能提供帮助 - 谢谢 :)

最佳答案

如果 Order_pres 中的 Approved 字段为 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

关于asp.net - 如何在 GridView 上过滤数据/连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529269/

相关文章:

c# - Office VSTO Word 2003 项目不断尝试自动转换为 2007

visual-studio - Visual Studio 调试器 - 以二进制显示整数值

c# - Winforms、数据绑定(bind)、列表框和文本框

c# - VB WPF 到 C# WPF

json - 在显示 View 之前未读取 View 模型数据

visual-studio - 如何在 cmake 中指定 .lib 文件的路径?

c# - 使用 HttpRequest 作为全局变量

c# - 一个 Controller 值到另一个 Controller 不在 asp.net mvc 中?

c# - EF 核心多对多配置不适用于 Fluent API

html - Asp.net 从后面的代码动态隐藏带有 for 循环的 div