Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 获取用于命令GridView行的复选框_Asp.net_Vb.net_Visual Studio_Gridview - Fatal编程技术网

Asp.net 获取用于命令GridView行的复选框

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

我有一个GridView保存我的订单表,这些是insert语句中插入的值。医嘱表显示在医生页面上,但我想添加到医嘱表中,以便在选中时可以批准/取消批准医嘱表,然后将“批准”列更新为已批准,如果未选中,则将“批准”列更新为未批准。我需要为此在GridView中添加一个复选框列。这是我学习的一部分,不是一个活的网站

如何将一列复选框添加到GridView中,以便在选中时将行设置为“批准/取消批准”

这是我的订单表-所有数据都是虚拟数据

网格:

提取数据的select语句:

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();
}