【问题标题】:How to get a select button in command field working in grid view如何在网格视图中工作的命令字段中获取选择按钮
【发布时间】:2016-06-16 14:34:28
【问题描述】:

我正在创建一个药物订购网站,它是一个原型,并为使用 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

这显示了以下内容:

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

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

   </Columns>
</asp:GridView>

选择表格中的药物后,所选信息应在此处更新(一旦更新,我将在另一个页面上显示此表格):

如果我需要提供更多信息来帮助解决问题,请提出。谢谢你

遇到错误:

【问题讨论】:

  • 问题出在哪里?
  • 当按钮被选中时,我希望药物在订单表上更新,我已经尝试过但无法让它工作
  • 在按钮点击事件中。
  • @sean lange - 我刚刚通过网格添加的命令字段选择按钮 - 我是否必须对其执行任何操作才能识别它是从行中选择药物还是会自动连接到行
  • 你有任何示例代码来展示这个吗?

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


【解决方案1】:

如果您将字段 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

【讨论】:

  • 我不知道你在数据源中添加medicineId是什么意思?
  • 您的Select 命令返回三个值(md.Name、md.Purpose、md.Instrcutions)。您可以将md.MedicineId 添加到列表中。
  • 我更新了我的答案以显示如何指定要在 GridView 中看到的字段(使用 BoundField)。请注意 GridView 声明中的AutoGenerateColumn="false"
  • 如果我更改我的 gridview 喜欢这将影响会话(用户在登录时看到的内容) - 网格正在从我的患者、药物和它们之间在我的数据库中的链接表中读取跨度>
  • 如果你在GridView1.DataSource = dt这一行有断点,你可以为dt添加一个监视,看看它包含多少行或项目。您也可以尝试直接在数据库引擎中运行选择查询,看看它是否返回了预期的记录。
猜你喜欢
  • 2011-02-21
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2012-10-18
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多