2009-08-04 8 views
1

J'ai une liste affichant nos projets en cours.Etat de case à cocher dans l'événement itemupdating de listview

Dans le gestionnaire d'événement itemediting de la vue liste, j'ai un certain nombre de cases à cocher qui sont rendues en utilisant des répéteurs imbriqués. Après le rendu, je parcourt toutes les cases à cocher et définit l'état correct en fonction des données extraites de la base de données. L'idée est que je peux cocher ou décocher n'importe laquelle des cases à cocher, et les changements sont enregistrés dans la base de données.

Mon problème réside dans le gestionnaire d'événements itemupdating: je ne parviens pas à conserver les états de case à cocher modifiés. Je reconnais les répéteurs imbriqués, mais cela semble écraser les états de case à cocher qui ont été définis lors de l'édition.

Tout pointeur sur la façon de conserver les états de case à cocher générés par un répéteur dans le modèle d'édition d'une vue liste serait grandement apprécié!

Merci Stijn

Répondre

0

Si vous REBIND les répéteurs imbriqués, ils seront mis à jour à partir de la source de données d'origine (Surgraver vos modifications). Essayez de ne pas reconsolider.

+0

Merci Max, mais comment puis-je référencer les cases à cocher de l'événement itemupdating sans relier? –

+0

Pourriez-vous s'il vous plaît poster un échantillon de code? Merci! – Max

+0

Merci d'avoir fourni le code. C'est un peu plus compliqué que je ne le pensais au début. J'essaierai d'y jeter un coup d'œil quand j'aurai plus de temps. Quelqu'un d'autre a des suggestions pour aider Stijn? – Max

1

D'abord, je lie le répéteur de rptDepts à itemediting

Public Sub lvProjects_OnItemEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewEditEventArgs) 

    Dim rptDepts As Repeater = lvProjects.EditItem.FindControl("rptDepts") 
    rptDepts.DataSource = bllDept.getServices() 
    rptDepts.DataBind() 

    'get tasks for projectID 
    Dim hdnprojectID As HiddenField = lvProjects.EditItem.FindControl("hdnStudyID") 
    getTasks(hdnProjectID.Value, rptDepts) 

End Sub 

Puis, quand rptDepts est databound, je lie le répéteur de rptTasks

Protected Sub lvDepts_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) 

    'get tasks for service    
    Dim rptTasks As Repeater = e.Item.FindControl("rptTasks") 
    rptTasks.DataSource = bllDept.getTasksForService(e.Item.DataItem("pk_dept_id")) 
    rptTasks.DataBind() 

End Sub 

Puis, à ItemUpdating, je REBIND rptDepts (qui vous a dit que je ne devrait pas faire

Public Sub lvProjects_OnItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) 

    'this item 
    Dim itmProject As ListViewItem = lvProjects.Items(e.ItemIndex) 

    'rebind depts 
    'Dim rptDepts As Repeater = itmProject.FindControl("rptDepts") 
    'rptDepts.DataSource = bllDept.getServices() 
    'rptDepts.DataBind() 

    'update project 
    bllProject.updateProject(itmProject, lblTest) 

    'unset edit status 
    lvProjects.EditIndex = -1 

    'success message     
    pnlFeedback.CssClass = "success" 
    ltlFeedback.Text = "Project <b>" & txtName.Text & "</b> was successfully updated." 

    'rebind 
    bindProjects() 

End Sub 

Mais dans la méthode bllProject.updateProject, j'ai besoin de b e possibilité de référencer les cases à cocher pour enregistrer les modifications dans le DB

0
Checked='<%# Eval("PreAcqClaim") ==DBNull.Value?false:true %>' MARKUP 

------------------CODE BEHIND-------------------------------- 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Claim : System.Web.UI.Page 
{ 
    CheckBox OurFaultCheckBox = new CheckBox(); 
    CheckBox PicturesCheckBox = new CheckBox(); 
    CheckBox ReportedInsCheckBox = new CheckBox(); 
    CheckBox ReportLateCheckBox = new CheckBox(); 
    CheckBox AssistRepairCheckBox = new CheckBox(); 
    CheckBox LitigationCheckBox = new CheckBox(); 
    CheckBox PreAcqClaimCheckBox = new CheckBox(); 

    DetailsDataTableAdapters.tblClaimsTableAdapter _adapter = new DetailsDataTableAdapters.tblClaimsTableAdapter(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      lvDetails.DataSource = _adapter.GetDataByPK_Claim_ID(Convert.ToInt32(Request.QueryString["PK_Claim_ID"])); 
      lvDetails.DataBind(); 
     } 
    } 
    protected void objDetails_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
    { 

    } 
    protected void lvDetails_ItemDataBound(object sender, ListViewItemEventArgs e) 
    { 
     //CheckBox OurFaultCheckBox = (CheckBox)lvDetails.FindControl("OurFaultCheckBox"); 
     //OurFaultCheckBox.Checked = true; 
     //OurFaultCheckBox = (CheckBox)e.Item.FindControl("OurFaultCheckBox"); 
     //PicturesCheckBox = (CheckBox)e.Item.FindControl("PicturesCheckBox"); 
     //ReportedInsCheckBox = (CheckBox)e.Item.FindControl("ReportedInsCheckBox"); 
     //ReportLateCheckBox = (CheckBox)e.Item.FindControl("ReportLateCheckBox"); 
     //AssistRepairCheckBox = (CheckBox)e.Item.FindControl("AssistRepairCheckBox"); 
     //LitigationCheckBox = (CheckBox)e.Item.FindControl("LitigationCheckBox"); 
     //PreAcqClaimCheckBox = (CheckBox)e.Item.FindControl("PreAcqClaimCheckBox"); 
    } 
    protected void objDetails_Inserting(object sender, ObjectDataSourceMethodEventArgs e) 
    { 
     CheckBox OurFaultCheckBox = (CheckBox)lvDetails.FindControl("OurFaultCheckBox"); 
     e.InputParameters.Add("OurFaultCheckBox", OurFaultCheckBox.Checked); 
    } 
    protected void objDetails_Updating(object sender, ObjectDataSourceMethodEventArgs e) 
    { 
     e.InputParameters.Add("OurFault", OurFaultCheckBox.Checked); 
     e.InputParameters.Add("Pictures", PicturesCheckBox.Checked); 
     e.InputParameters.Add("ReportedIns", ReportedInsCheckBox.Checked); 
     e.InputParameters.Add("ReportLate", ReportLateCheckBox.Checked); 
     e.InputParameters.Add("AssistRepair", AssistRepairCheckBox.Checked); 
     e.InputParameters.Add("Litigation", LitigationCheckBox.Checked); 
     e.InputParameters.Add("PreAcqClaim", PreAcqClaimCheckBox.Checked); 
    } 
    protected void lvDetails_ItemUpdating(object sender, ListViewUpdateEventArgs e) 
    { 
     DetailsDataTableAdapters.tblClaimsTableAdapter _adapter = new DetailsDataTableAdapters.tblClaimsTableAdapter(); 


     OurFaultCheckBox = (CheckBox)lvDetails.EditItem.FindControl("OurFaultCheckBox"); 
     PicturesCheckBox = (CheckBox)lvDetails.EditItem.FindControl("PicturesCheckBox"); 
     ReportedInsCheckBox = (CheckBox)lvDetails.EditItem.FindControl("ReportedInsCheckBox"); 
     ReportLateCheckBox = (CheckBox)lvDetails.EditItem.FindControl("ReportLateCheckBox"); 
     AssistRepairCheckBox = (CheckBox)lvDetails.EditItem.FindControl("AssistRepairCheckBox"); 
     LitigationCheckBox = (CheckBox)lvDetails.EditItem.FindControl("LitigationCheckBox"); 
     PreAcqClaimCheckBox = (CheckBox)lvDetails.EditItem.FindControl("PreAcqClaimCheckBox"); 

     try 
     { 
      _adapter.Update("eventNum", "jobNum","test", "1", DateTime.Now, "", "", "", 
          "", "", "", DateTime.Now, "", "", "", "54143", "", "", "", 
          OurFaultCheckBox.Checked, PicturesCheckBox.Checked, 
          ReportedInsCheckBox.Checked, ReportLateCheckBox.Checked, 
          AssistRepairCheckBox.Checked, LitigationCheckBox.Checked, 
          PreAcqClaimCheckBox.Checked, 
          Convert.ToInt32(Request.QueryString["PK_Claim_ID"])); 
     } 
     catch (Exception ex) 
     { 

     } 
     lvDetails.EditIndex = -1; 

    } 
    protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
    { 

    } 

    protected void lvDetails_ItemEditing(object sender, ListViewEditEventArgs e) 
    { 
     lvDetails.EditIndex = e.NewEditIndex; 
    } 

} 
Questions connexes