如何在网格视图中的命令字段中获取选择按钮

时间:2016-06-16 14:34:29

标签: asp.net sql-server vb.net visual-studio-2013

我正在创建一个药物订购网站,它是一个原型,并使用asp.net和vb保存项目的组成数据。患者,医生和药物已经记录在数据库中。患者登录,看到自己的药物(通过会话 - 这显示在网格上),我添加了一个选择按钮 - 当选择按钮时,我希望药物在订单表上更新(也记录订购的日期)。

有一张病人表和一张药品表 - 患者通过链接表(处方表)将两个复合键与药物联系起来。用户登录后,会重定向到user.aspx页面 -

登录时从数据库中显示已记录用户药物的代码:

Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)

    If Not IsPostBack Then
        Dim conn As New System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Laura\Final_proj\App_Data\surgerydb.mdf;Integrated Security=True;Connect Timeout=30")
        Dim cmdstring As String = "SELECT md.Name, md.Purpose, md.Instrcutions  " +
                                    "FROM Patient pt INNER JOIN prescription pr ON pt.PatientId = pr.PatientId  " +
                                    "INNER JOIN medicine md ON md.MedicineId = pr.MedicineId Where pt.PatientId  = @PatientId"
        Dim dt As New System.Data.DataTable()
        Dim da As New System.Data.SqlClient.SqlDataAdapter(cmdstring, conn)
        da.SelectCommand.Parameters.Add("@PatientId", System.Data.SqlDbType.Int).Value = CInt(Session("PatientId").ToString())
        conn.Open()
        da.Fill(dt)
        conn.Close()

        GridView1.DataSource = dt
        GridView1.DataBind()
    End If

End Sub

这显示以下内容:

logged in

我在aspx中为网格添加了一个新列,以便显示选择按钮 - 这些是我想要与行和选定药物对应的按钮:

 <asp:GridView ID="GridView1" runat="server" >
   <Columns>
     <asp:CommandField ShowSelectButton="True" />

   </Columns>
</asp:GridView>

一旦选择了药物中的药物,所选信息应该在此更新(我会在更新后在另一页上显示该表):

order

如果我需要提供更多信息来帮助解决问题,请询问。三江源

错误经历:

enter image description here

1 个答案:

答案 0 :(得分:3)

如果您将字段MedicineId添加到数据源,则可以在TemplateField中包含LinkBut​​ton,并将其CommandArgument设置为MedicineID值:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton runat="server" Text="Select" CommandName="UpdateMedicine" CommandArgument='<%# Eval("MedicineId") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="Purpose" HeaderText="Purpose" />
        <asp:BoundField DataField="Instrcutions" HeaderText="Instructions" />
    </Columns>
</asp:GridView>

然后在代码隐藏中处理RowCommand事件:

Protected Sub GridView1_RowCommand(sender As Object, e as GridViewCommandEventArgs)
    If e.CommandName = "UpdateMedicine" Then
        Dim medecineID As Integer = Integer.Parse(e.CommandArgument.ToString())
        // Update the data in the database
        ...
    End If
End Sub