button - Page postback - double binding -
i've got webpage has datagrid that's built dynamically depending on date , filters selected. on itemdatabound linkbutton created each cell when clicked open modal popup details can amended. problem i've got when change filters (datepicker, btnshow) page binding twice , duplicating columns in grid. if put != page.ispostback, when click cell linkbutton, datagrid disappears. please help
<%@ 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"> </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"> </td> <td> <asp:label id="label1" runat="server" cssclass="norm"> name:</asp:label> </td> <td> <asp:label id="lblname" runat="server" cssclass="norm"></asp:label> </td> </tr> <tr height="25"> <td width="10px"> </td> <td valign="top"> <asp:label id="label4" runat="server" cssclass="norm"> 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> <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"> week:</asp:label> <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--> code behind
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(); }
on postback page_load called , binding logic invokes because doesn't stands under !page.ispostback. try use this
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); } }
Comments
Post a Comment