2016-07-22 72 views
3

我正在将排序网站作为作业的一部分。医生登录并看到病人提出的所有命令。当医生点击某些复选框并单击该按钮时 - 选中的框将订单(行)列(批准)更新为批准。未经检查的框更新批准列拒绝 - 这一切的作品和更新...如何筛选网格视图上的数据/视图

然而,网格并没有消失后,医生可以不断更新订单,并改变他们,但我只想要新的订单有未被选中/取消选中。 - 我不知道如何将这个应用到我的vb代码。

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

我的网格:

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 

<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代码

末级

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

+0

标题说您要隐藏GridView,但实际上是要过滤其内容。那是对的吗? – ConnorsFan

+0

你好@ConnorsFan!是的,这确实是我想要做的 – laurajs

+0

@ConorsFan - 我已经编辑了标题,你知道这可以做到吗? – laurajs

回答

1

如果ApprovedNULLOrder_pres只要没有作出决定有关订单的批准,你可以试试这个:

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中的相应记录尚未批准或尚未被拒批。

N.B.上面的代码假设在VB代码文件的顶部存在以下行:

Imports System.Data 
Imports System.Data.SqlClient 
+0

嗨@ConnorsFan!谢谢你的回答 - 我已经将我的问题中的代码更新为文件后面的所有代码,你能否告诉我哪个部分去的地方:) – laurajs

+0

我更新了我的答案,以显示代码替换事件处理程序的结尾为'btnapprove.Click'(从'Dim cmd3string As String ...'到方法的末尾)。 – ConnorsFan

+0

这是有效的 - 点击按钮时网格消失 - 但是当我重新加载页面/登录时它又重新出现有没有办法显示像新的订单(已被选中),但它们仍然保留在订单表中 – laurajs