2009-08-04 57 views
1

我有一個列表視圖顯示我們當前的項目。列表視圖itemupdating事件中的複選框狀態

在listview的itemediting事件處理程序中,我有一些使用嵌套中繼器呈現的複選框。渲染完成後,我遍歷所有複選框,並根據從數據庫中檢索的數據設置正確的狀態。

這個想法是,我可以選中或取消選中任何複選框,並將更改保存在數據庫中。

我的問題在於itemupdating事件處理程序:我無法保留更改的複選框狀態。我重新綁定了嵌套的中繼器,但是這似乎覆蓋了在編輯過程中設置的複選框狀態。

任何有關如何保留由listview的edititemtemplate中的中繼器生成的複選框狀態的指針將不勝感激!

感謝 斯泰恩

回答

0

如果重新綁定嵌套的轉發器,它們將被從原來的數據源更新(覆蓋您的更改)。儘量不要重新綁定。

+0

謝謝最大,但我怎麼能然後引用在itemupdating事件的複選框不重新綁定? – 2009-08-04 10:23:32

+0

您能否發佈代碼示例?謝謝! – Max 2009-08-04 10:54:06

+0

感謝您提供代碼。這比我一開始想的要複雜一點。當我有更多時間時,我會試着去查看它。 其他人有什麼建議來幫助Stijn? – Max 2009-08-04 14:04:18

1

首先我綁定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 

然後,當rptDepts是數據綁定,我綁定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 

然後,在itemupdating,我重新綁定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 Ë能夠引用複選框將更改保存到數據庫

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

} 
相關問題