2013-04-05 68 views
0

我有一个网页有一个动态构建的数据网格,具体取决于所选的日期和过滤器。在itemdatabound上为每个单元格创建一个链接按钮,因此当单击时会打开一个模式弹出窗口,其中包含可修改的细节。我得到的问题是,当我更改过滤器(datepicker,btnShow)时,页面会绑定两次并复制网格中的列。如果我放一个!= page.ispostback,当我点击单元格链接按钮时,数据网格消失。 请帮助页面回发 - 双重绑定

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" 
    CodeBehind="Frm.aspx.cs" Inherits="web.Frm" %> 

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <script type="text/javascript" language="javascript" src="Scripts/script.js"> </script> 
    <script src="Scripts/jquery-1.8.3.js" type="text/javascript"></script> 
    <script src="Scripts/jquery-ui-1.9.2.custom.js" type="text/javascript"></script> 

    <script language="javascript" type="text/javascript"> 
     $(document).ready(function() { 
      $('#<%= datepicker.ClientID %>').datepicker({ changeMonth: true, changeYear: true }); 
     }); 

    </script> 

    <asp:ScriptManager runat="server" ID="scriptManager" EnablePageMethods="true"> 
    </asp:ScriptManager> 
    <asp:Button ID="btnShowPopupAmend" Style="display: none" runat="server" /> 
    <!--Start:Amend Details--> 
    <asp:ModalPopupExtender ID="mpeAmend" runat="server" TargetControlID="btnShowPopupAmend" 
     PopupControlID="pnlpopupAmend" CancelControlID="imgCancel" BackgroundCssClass="modalBackground" /> 
    <asp:Panel ID="pnlpopupAmend" runat="server" Width="700px" Style="display: none;" 
     class="ModalPanel"> 
     <asp:Panel ID="pnlInner" runat="server" BackColor="white" Width="700px"> 
      <table style="width: 700px;" class="BG"> 
       <tr> 
        <td width="10px"> 
         &nbsp; 
        </td> 
        <td align="left"> 
         <asp:Label ID="lbl" runat="server" Text="Amend" CssClass="norm_w" Font-Bold="True"></asp:Label> 
        </td> 
        <td align="right"> 
         <asp:Button ID="btnAmendCloseConfirm" runat="server" Text="x" OnClick="imgCancel_Click"> 
         </asp:Button> 
        </td> 
       </tr> 
       </tr> 
       <table style="width: 700px;"> 
        <tr height="25"> 
         <td width="10px"> 
          &nbsp; 
         </td> 
         <td> 
          <asp:Label ID="Label1" runat="server" CssClass="norm">&nbsp;Name:</asp:Label> 
         </td> 
         <td> 
          <asp:Label ID="LblName" runat="server" CssClass="norm"></asp:Label> 

         </td> 
        </tr> 
        <tr height="25"> 
         <td width="10px"> 
          &nbsp; 
         </td> 
         <td valign="top"> 
          <asp:Label ID="Label4" runat="server" CssClass="norm">&nbsp;Address:</asp:Label> 
         </td> 
         <td> 
          <asp:TextBox ID="TxtAddress" runat="server" CssClass="norm_no_border" TextMode="MultiLine" 
           Rows="4" Width="300px" Style="overflow: hidden"></asp:TextBox> 
         </td> 
        </tr> 
       </table> 
       <br /> 
       <asp:Button ID="imgCancel" Text="cancel" Height="25px" Width="80px" runat="server" 
        OnClick="imgCancel_Click" /> 
     </asp:Panel> 
    </asp:Panel> 
    <!--End:Amend Details--> 
    <!--Start:Filters--> 
    <div> 
     <asp:Label ID="Lbl1" runat="server" CssClass="norm">Show Details:</asp:Label> 
     <asp:CheckBox ID="ChkDetails" runat="server"></asp:CheckBox> 
     <asp:Label ID="Lbl2" runat="server" CssClass="norm"> Show Names:</asp:Label> 
     <asp:CheckBox ID="ChkNames" runat="server"></asp:CheckBox> 
     &nbsp;<asp:Button ID="btnShow" Text="Go" runat="server" OnClick="btnShow_Click"> 
     </asp:Button> 
    </div> 
    <!--End:Filters--> 
    <br /> 
    <!--Start:Grid--> 
    <div> 
     <asp:Label ID="lblBeginning" runat="server" CssClass="head2">&nbsp;&nbsp;Week:</asp:Label> 
     &nbsp;&nbsp;<asp:TextBox ID="datepicker" runat="server" AutoPostBack="true" CssClass="norm" 
      OnTextChanged="datepicker_TextChanged"></asp:TextBox> 
    <br /> 
    </div> 
    <asp:DataGrid ID="dgData" runat="server" CssClass="DG" Width="100%" CellPadding="4" 
     AutoGenerateColumns="False" GridLines="Vertical" OnItemDataBound="dgData_ItemDataBound"> 
     <AlternatingItemStyle CssClass="Alternating"></AlternatingItemStyle> 
     <ItemStyle CssClass="Item"></ItemStyle> 
     <Columns> 
      <asp:TemplateColumn> 
       <HeaderStyle CssClass="head"></HeaderStyle> 
       <ItemStyle CssClass="bdr"></ItemStyle> 
      </asp:TemplateColumn> 
     </Columns> 
    </asp:DataGrid> 
    <!--End:Grid--> 

代码背后

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 

       if (Session["Week"] != null) 
       { 
        DateTime dDate = DateTime.Parse(Session["Week"].ToString()); 
        datepicker.Text = Utils.GetFirstDateOfWeek(dDate, DayOfWeek.Monday).ToString("dd MMM yyyy"); 
       } 
       else 
       { 
        datepicker.Text = Utils.GetFirstDateOfWeek(DateTime.Now, DayOfWeek.Monday).ToString("dd MMM yyyy"); 
        Session["Week"] = datepicker.Text.ToString(); 
       } 

      } 
      BindData(datepicker.Text, ChkDetails.Checked, ChkNames.Checked); 

     } 

     protected void datepicker_TextChanged(object sender, EventArgs e) 
     { 
      BindData(datepicker.Text, ChkDetails.Checked, ChkNames.Checked); 
      Session["Week"] = datepicker.Text.ToString(); 
     } 
     protected void BindData(string sWkDate, Boolean bDetails, Boolean bNames) 
     { 
      DataSet ds = null; 
      ds = ListGridDetails(sWkDate); 

      // ................. 
     } 
     protected void dgData_ItemDataBound(object sender, DataGridItemEventArgs e) 
     { 

      if (e.Item.ItemType == ListItemType.AlternatingItem | e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.SelectedItem) 
      { 
       LinkButton lnk = default(LinkButton); 
       lnk = new LinkButton(); 
       lnk.Text = "Amend"; 
       lnk.CommandName = "Amend"; 
       lnk.CommandArgument = id; 
       lnk.Command += new CommandEventHandler(AmendButtonClick); 
       e.Item.Cells[i].Controls.Add(lnk); 

      } 
     } 
     public void AmendButtonClick(object sender, CommandEventArgs e) 
     { 

      //............. 

      this.mpeAmend.Show(); 

     } 

回答

0

回发Page_Load称为好,并且绑定逻辑调用,因为它不!Page.IsPostBack下站立。尝试使用这个

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 

     if (Session["Week"] != null) 
     { 
      DateTime dDate = DateTime.Parse(Session["Week"].ToString()); 
      datepicker.Text = Utils.GetFirstDateOfWeek(dDate, DayOfWeek.Monday).ToString("dd MMM yyyy"); 
     } 
     else 
     { 
      datepicker.Text = Utils.GetFirstDateOfWeek(DateTime.Now, DayOfWeek.Monday).ToString("dd MMM yyyy"); 
      Session["Week"] = datepicker.Text.ToString(); 
     } 

     BindData(datepicker.Text, ChkDetails.Checked, ChkNames.Checked); 
    } 
} 
+0

嗨,当过滤器被使用时,它只绑定一次,但当单击链接按钮(在单元格中)打开模式弹出。数据网格中没有任何内容,修改按钮不会触发。 – user1801525 2013-04-05 22:45:23