2017-10-15 2 views
0

J'ai un système de commande montrant les commandes qui ont été reçues et les commandes en cours. Si la commande est reçue et que la case est cochée, je souhaite ajouter la date à la base de données lors de la réception de la commande. Évidemment je voudrais seulement ajouter la date à la rangée qui a été vérifiée. Merci d'avance.ajouter une date à la base de données si la case à cocher est cochée dans gridview

HTML pertinent comme suit:

      <asp:GridView ID="gvOpenOrders" runat="server" AutoGenerateColumns="False" Width="100%" CellPadding="4" ForeColor="#333333" 
           GridLines="None" DataKeyNames="PurchaseOrderID" AllowPaging="True" AllowSorting="True" 
           OnSorting="gvOpenOrders_Sorting" EnableViewState="true" OnPageIndexChanging="OnPageIndexChanging" PageSize="15" ViewStateMode="Enabled"> 
           <AlternatingRowStyle BackColor="White" /> 
           <Columns> 
            <asp:TemplateField HeaderText="Is Received" SortExpression="IsReceived"> 
             <ItemTemplate> 
              <asp:CheckBox ID="chkRcvd" runat="server" AutoPostBack="true" Checked='<%# Bind("IsReceived") %>' Enabled='<%# Eval("IsReceived") = False %>' OnCheckedChanged="chkRcvd_CheckedChanged" /> 
             </ItemTemplate> 
            </asp:TemplateField> 

Je suis actuellement à jour la base de données lorsqu'un bouton Mettre à jour reçu est cliqué, voir ci-dessous:

Protected Sub btnUpdateReceived_Click(sender As Object, e As EventArgs) Handles btnUpdateReceived.Click 

    con.Open() 
    For Each row As GridViewRow In gvOpenOrders.Rows 
     Dim purchaseOrderID As Integer = Convert.ToInt32(gvOpenOrders.DataKeys(row.RowIndex).Values(0)) 
     Dim isReceived As Boolean = TryCast(row.FindControl("chkRcvd"), CheckBox).Checked 

     cmd.CommandText = "usp_UpdatePurchaseOrder" 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Parameters.Clear() 
     cmd.Parameters.AddWithValue("@OrderID", purchaseOrderID) 
     cmd.Parameters.AddWithValue("@IsReceived", isReceived) 
     cmd.ExecuteNonQuery() 
    Next 
    con.Close() 
    Response.Redirect(Request.Url.AbsoluteUri) 

End Sub 

Je sais qu'il ya un événement checkbox_CheckedChanged mais je Je ne sais pas comment l'utiliser.

Répondre

0

Vous pouvez ajouter ce code dans l'événement CheckedChanged:

CheckBox chkSelect = (CheckBox)sender; 

if (chkSelect.Checked) 
{ 
    string date = DateTime.Today.ToString("dd-MM-yyyy"); 
} 

L'espoir pourrait le convertir en code de VB.

0
protected void chkRcvd_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkSelect = (CheckBox)sender; 

    if (chkSelect.Checked) 
    { 
     string date = DateTime.Today.ToString("dd-MM-yyyy"); 
    } 
} 
+0

Ceci est utile pour me donner la date à laquelle la CheckBox a été sélectionné, mais je suis encore un peu aux extrémités à essayer d'obtenir l'identifiant du CheckBox qui a été vérifié. La section "Pour chaque" que j'utilise ci-dessus parcourt chaque rangée où je veux seulement la ligne qui a été sélectionnée. Pensées? – mooreev

0

Comme je pense qu'une seule modification peut trouver votre solution. Essayez ceci:

string strDate=stirng.Empty; 
foreach (GridViewRow rw in grid1.Rows) 
     { 
      CheckBox chkBx = (CheckBox)rw.FindControl("Check"); 
      if (chkBx != null && chkBx.Checked) 
      {    
       strDate = ((Label)rw.FindControl("lblDate")).Text; 
     } 
     }