2009-08-04 2 views
1

나는 현재 프로젝트를 표시하는 listview를 가지고있다.listview의 itemupdating 이벤트의 체크 박스 상태

listview의 itemediting 이벤트 처리기에서 중첩 된 반복기를 사용하여 렌더링되는 여러 확인란이 있습니다. 렌더링 후에는 모든 확인란을 반복하고 DB에서 검색 한 데이터를 기반으로 정확한 상태를 설정합니다.

체크 상자를 선택하거나 선택 취소 할 수 있고 변경 사항이 db에 저장됩니다.

내 문제는 itemupdating 이벤트 처리기에 있습니다. 변경된 확인란 상태를 유지할 수 없습니다. 중첩 된 리피터를 다시 바인딩하지만 편집 중에 설정된 확인란 상태를 덮어 쓰는 것 같습니다.

listview의 edititemtemplate에있는 repeater에 의해 생성 된 체크 박스 상태를 유지하는 방법에 대한 모든 정보는 크게 감사하겠습니다! 당신이 중첩 된 리피터를 리 바인드 경우

덕분에 스테인

답변

0

, 그들은 원래 데이터 소스에서 업데이트됩니다 (변경 사항을 덮어 쓰기). 다시 바인딩하지 마십시오.

+0

감사합니다. 그렇다면 어떻게 되풀이하지 않고 itemupdating 이벤트에서 확인란을 참조 할 수 있습니까? –

+0

코드 샘플을 게시 하시겠습니까? 감사! – Max

+0

코드를 제공해 주셔서 감사합니다. 그것은 처음에 생각했던 것보다 약간 더 복잡합니다. 나는 시간이 더있을 때 그것을 조사하려고 노력할 것이다. 누구든지 Stijn을 돕기위한 제안이 있습니까? – Max

1

먼저 나는 rptDepts이 바인딩이 때, 나는 itemupdating에, 나는 당신이 내가 말했다 rptDepts을 (바인딩,

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 

그런 다음 rptTasks 리피터 바인딩 그리고

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 

을 itemediting에서 rptDepts 리피터 바인딩 하지 말아야 할 것

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 

그러나 bllProject.updateProject 메소드에서 b 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; 
    } 

} 
관련 문제