【问题标题】:Checkbox state in itemupdating event of listview列表视图的项目更新事件中的复选框状态
【发布时间】:2012-09-14 22:28:51
【问题描述】:

我有一个显示我们当前项目的列表视图。

在列表视图的 itemediting 事件处理程序中,我有许多使用嵌套转发器呈现的复选框。渲染后,我遍历所有复选框并根据从数据库中检索到的数据设置正确的状态。

我的想法是我可以选中或取消选中任何复选框,并将更改保存在数据库中。

我的问题在于 itemupdating 事件处理程序:我无法保留已更改的复选框状态。我重新绑定了嵌套的中继器,但这似乎覆盖了编辑期间设置的复选框状态。

任何关于如何在列表视图的edititemtemplate中保留由转发器生成的复选框状态的指针将不胜感激!

谢谢 斯蒂金

【问题讨论】:

    标签: asp.net listview repeater


    【解决方案1】:

    首先我在 itemediting 处绑定 rptDepts 中继器

    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 方法中,我需要能够引用复选框以将更改保存到数据库

    【讨论】:

      【解决方案2】:

      如果您重新绑定嵌套中继器,它们将从原始数据源更新(覆盖您的更改)。尽量不要重新绑定。

      【讨论】:

      • 谢谢 Max,但是我怎样才能在 itemupdating 事件中引用复选框而不重新绑定?
      • 感谢您提供代码。这比我一开始想的要复杂一些。当我有更多时间时,我会尝试研究它。还有其他人有帮助 Stijn 的建议吗?
      【解决方案3】:
      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;
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        • 2017-11-17
        相关资源
        最近更新 更多