2009-08-04 17 views
1

私は現在のプロジェクトを表示しているリストビューを持っています。listviewのitemupdatingイベントのチェックボックスの状態

listviewのitemeditingイベントハンドラには、ネストされたリピータを使用してレンダリングされる多数のチェックボックスがあります。レンダリング後、すべてのチェックボックスをループし、DBから取得したデータに基づいて正しい状態を設定します。

チェックボックスをオンまたはオフにすることができ、変更がdbに保存されるということです。

私の問題はitemupdatingイベントハンドラにあります。変更されたチェックボックスの状態を保持できません。ネストされたリピータを再バインドしますが、これは編集中に設定されたチェックボックスの状態を上書きするようです。

listviewのedititemtemplateでリピータによって生成されたチェックボックスの状態を保持する方法についてのあらゆる指針は、非常に高く評価されます!ネストされたリピータを再バインドする場合

おかげで Stijn

答えて

0

、彼らは元のデータソースから更新されます(変更内容を上書きします)。再バインドしないでください。私は

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リピーターをバインド

+0

ありがとうございます。ただし、再バインドせずにitemupdatingイベントでチェックボックスを参照するにはどうすればよいですか? –

+0

コードサンプルを投稿してください。ありがとう! – Max

+0

コードを提供していただきありがとうございます。私が最初に思っていたより少し複雑です。私はもっ​​と時間があるときにそれを調べようとします。 他に誰かがStijnを助けるための提案がありますか? – Max

1

まず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にする必要がありますチェックボックスを参照して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; 
    } 

} 
関連する問題