2016-07-20 1 views
0

管理者が注文を承認できるようにチェックボックスが付いたグリッドビューがあります。彼は注文のリストと彼がチェックしたものを与えられ、ボタンをクリックすると未チェックのままになり、データベースの承認フィールドが更新されます。グリッド上の行の値をCheckBoxおよびボタンで更新する

確認 -

未確認の承認- - に承認されたフィールドの値に更新承認フィールドに更新値をへ - 不承認

私はいくつかの困難を経験していますしかし:

をチェックボックス付きのグリッドがあります。

<asp:GridView ID="GridViewdoc" runat="server" AutoGenerateColumns="False"> 
    <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> 
    <ItemTemplate> 
<asp:CheckBox Text="Approve" ID="ApproveBox" runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 

それは私のデータベースでオーダーテーブルから、このselect文成り立つ:

Create View docgridview 
As 

Select A.OrderID, A.DoctorId, B.Forename, B.Surname, A.MedicineId, C.Name as MedicineName, D.pharmname, 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) 

をのでのようなグリッドビューにバインドします(選択docgridview)

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() 
     HttpContext.Current.Session("Approved") = dt 
    End If 

これはチェックボックスとボタンを制御します

Protected Sub GridViewdoc_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewdoc.RowDataBound 


    If e.Row.RowType = DataControlRowType.DataRow Then 

     CType(e.Row.FindControl("Approvebox"), CheckBox).Checked = True 
    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") 
    For Each row As GridViewRow In GridViewdoc.Rows 
     Dim cb As CheckBox = row.FindControl("ApproveBox") 
     If cb.checked Then 
      dt.Rows(row.RowIndex).Item(8) = "Approved" 
     Else 
      dt.Rows(row.RowIndex).Item(8) = "Disapproved" 
     End If 
    Next 
    GridViewdoc.DataSource = dt 
    GridViewdoc.DataBind() 
End Sub 

私はエラー expereincingています:button.clickで確認されているチェックボックスのための

enter image description here

- の値に変更する必要があり、注文表に「承認済み」のカラムを承認済み

ボタンをクリックしてチェックを外したチェックボックスの場合 - 注文表の[承認済み]列は値に変更する必要がありますは不承認です。

この

が更新されます注文表である(ビットとして設定されて承認され、私はこれが正しいかどうかを確認していない):

enter image description here

enter image description here

答えて

0

[Order_pres].[Approved]はビットフィールドであり、それを文字列値に設定しようとしています。 cb.checkedに設定するだけです。その代わりに、このの

If cb.checked Then 
     dt.Rows(row.RowIndex).Item(8) = "Approved" 
Else 
     dt.Rows(row.RowIndex).Item(8) = "Disapproved" 
End If 

は、次の操作を行います。

dt.Rows(row.RowIndex).Item(8) = cb.checked 
+0

ここではこれをcb.checkedに設定しますか?私がフィールドの異なるタイプを通過するときには、cb.checkedはありません – laurajs

+0

@laurajs、編集を参照してください。 – Crowcoder

+0

ですが、チェックしないと承認された場合は値が更新され、チェックされていないと不承認となります。これはこれらの値を取り除きます。 – laurajs

0

あなたのフィールドには、それはどちらかまたはの値をとることができることを意味ビット、です。 NVARCHARするタイプを変更することで、あなたが値

2 - 変更に入力を設定する自由を持っている :データベースでのnvarcharする

の1-変更の種類:あなたのケースのために、あなたは私がフィット感を見ることができるアクションの2例を持っていますtrueまたはfalseに設定し、VB.netを使用してブール値をApproved/Disapprovedに変換します。

データベースを変更しないように2番目のアクションをお勧めします。

+0

こんにちはZaid!あなたのアンサーに感謝しています - しかし、私は2番目の方法を知っていません - タイプ文字列を見つけることができません? – laurajs

+0

私はそれがSQLのnvarcharだと思う。 –

+0

こんにちはZaid - 私はこれにデータ型を変更しましたが、いくつかの注文を残してそれをテストした後、私はクリックしてhteボタンをクリックしてグリッドを再表示してボックスが再表示されたと私はまた、すべてがまだNULLです – laurajs

関連する問題