Asp.net 获取用于命令GridView行的复选框
我有一个GridView保存我的订单表,这些是insert语句中插入的值。医嘱表显示在医生页面上,但我想添加到医嘱表中,以便在选中时可以批准/取消批准医嘱表,然后将“批准”列更新为已批准,如果未选中,则将“批准”列更新为未批准。我需要为此在GridView中添加一个复选框列。这是我学习的一部分,不是一个活的网站 如何将一列复选框添加到GridView中,以便在选中时将行设置为“批准/取消批准” 这是我的订单表-所有数据都是虚拟数据 网格: 提取数据的select语句:Asp.net 获取用于命令GridView行的复选框,asp.net,vb.net,visual-studio,gridview,Asp.net,Vb.net,Visual Studio,Gridview,我有一个GridView保存我的订单表,这些是insert语句中插入的值。医嘱表显示在医生页面上,但我想添加到医嘱表中,以便在选中时可以批准/取消批准医嘱表,然后将“批准”列更新为已批准,如果未选中,则将“批准”列更新为未批准。我需要为此在GridView中添加一个复选框列。这是我学习的一部分,不是一个活的网站 如何将一列复选框添加到GridView中,以便在选中时将行设置为“批准/取消批准” 这是我的订单表-所有数据都是虚拟数据 网格: 提取数据的select语句: Create View t
Create View theallview
As
Select A.OrderID
,A.PatientId ,B.Forename,B.Surname ,A.MedicineId ,C.Name as MedicineName ,E.Name as DoctorName, A.PharmacyId ,D.pharmname ,A.DoctorId ,A.Dateordered, Approved
From order_pres A
Left Join Patient B on (A.PatientId = B.PatientId)
Left Join Medicine C on (A.MedicineId = C.MedicineId)
Left Join pharmacy D on (A.PharmacyId = D.PharmacyId)
Left Join Doctor E on (A.DoctorId = E.DoctorId)
订单表现在的外观顺便说一句,这都是虚拟数据:
按钮。单击事件将提交选中的值
如果有人需要关于这个问题的更多信息,请告诉我。试试这个。它是用C编写的,但是你应该能够很容易地计算出VB.Net 作为旁白,我将把您的代码放在它自己的方法中加载数据。更新了approved后,我建议重新加载网格视图 ASPX:
您的DB字段已批准为varchar50。这是要用作列源的字段吗?如果是这样的话,它应该是bit typeHi@Andrei-这是我想更新的列,如果选中,则批准;如果未选中,则不批准。那么您希望它成为字符串列的具体原因是什么?事实上,bit在这里更有意义,这基本上是布尔的,而且你的网格视图列将只在boxHi@Andrei中工作-你认为什么方式最好?在下面的回答中,当我尝试将复选框列应用于gridview时,我得到了错误,因为下面的回答假设Db列是位/布尔列,而不是。这应该是,真的,如果你问我的意见,这是一种方法。你们需要在那个里存储的信息是二进制的,不管是批准的还是未批准的,这正是Boolean的意思。嗨,Michael,谢谢你们的回答。当我在没有隐藏代码的情况下将其应用于gridview并尝试打开之前显示网格的页面时-我现在得到以下错误-“/”应用程序中的服务器错误。编译错误说明:在编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改源代码。编译器错误消息:编译器失败,错误代码为1。您需要将代码隐藏到位,否则代码将出错。如果您只想运行aspx部分,请删除:OnCheckedChanged=chkaprovided\u CheckedChangedMichael,感谢您的帮助:所以我取出了这个,但在Checked下仍然收到一个错误=它表示其他信息:从类型“DBNull”到类型“Boolean”的转换无效。-当我删除网格中唯一出现的复选框时,没有加入正常显示的网格的其余部分。我已更改为bit,但现在尝试在选中“我正在获取-其他信息:从类型“DBNull”到类型“布尔”的转换无效@AndreiI在我的答案中添加了一些额外的代码,应该可以解决DBNull问题。我还添加了一个如何包含其他列的示例。使用gridview时,属性AutoGenerateColumns默认设置为true。在我的代码中,这被设置为false,以便更好地处理复选框。像这样将代码内联是一种糟糕的数据管理方式。如果您有大量的处理工作要做,代码隐藏始终是一种方法。
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 alltheview 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
Create View theallview
As
Select A.OrderID
,A.PatientId ,B.Forename,B.Surname ,A.MedicineId ,C.Name as MedicineName ,E.Name as DoctorName, A.PharmacyId ,D.pharmname ,A.DoctorId ,A.Dateordered, Approved
From order_pres A
Left Join Patient B on (A.PatientId = B.PatientId)
Left Join Medicine C on (A.MedicineId = C.MedicineId)
Left Join pharmacy D on (A.PharmacyId = D.PharmacyId)
Left Join Doctor E on (A.DoctorId = E.DoctorId)
<asp:GridView ID="GridViewdoc" DataKeyNames="OrderId" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField HeaderText ="Order Id" DataField="OrderId" />
<asp:BoundField HeaderText ="Patient Id" DataField="PatientId" />
<asp:BoundField HeaderText ="Medicine Id" DataField="MedicineId" />
<asp:BoundField HeaderText ="Pharmacy Id" DataField="PharmacyId" />
<asp:BoundField HeaderText ="Doctor Id" DataField="DoctorId" />
<asp:BoundField HeaderText ="Date Ordered" DataField="Dateordered" />
<asp:TemplateField HeaderText="Approve/Unapprove">
<ItemTemplate>
<asp:CheckBox ID="chkApproved" AutoPostBack="true" Checked='<%# Eval("Approved") == null || Eval("Approved") == DBNull.Value ? false : Eval("Approved") %>' runat="server" OnCheckedChanged="chkApproved_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void chkApproved_CheckedChanged(object sender, EventArgs e)
{
CheckBox chkApproved = (CheckBox)sender;
GridViewRow gridViewRow = (GridViewRow)chkApproved.Parent.Parent;
int orderID = (int)GridViewdoc.DataKeys[gridViewRow.RowIndex].Value;
bool approved = chkApproved.Checked;
//Your update method
UpdateApproved(orderID, approved);
//Your data load method
LoadData();
}