c# - GridView client side paging not working -


work data other program (for example in code use random number array - query data other program). query datatable , bind gridview + adds rows delete button.

on delete button click - button inactive (use button.enabled = false; , updatepanel on buttons click have "old" array works great). when use paging - have "new" array each time.

how fix it? need - in first page click button - became inactive, choose second page, return in first page , see "old" array inactive button.

aspx

<%@ page language="c#" autoeventwireup="true" codebehind="default.aspx.cs" inherits="webapplication1.webform1" %>  <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">      <title></title>     </head> <body>     <form id="form1" runat="server">     <asp:scriptmanager id="scriptmanager1" runat="server">     </asp:scriptmanager>     <div>     <asp:updatepanel id="up1" runat="server" updatemode="conditional">     <contenttemplate>             <asp:gridview id="gridview1" runat="server" autogeneratecolumns="false" onrowdeleted="gridview1_rowdeleted"             onrowdeleting="gridview1_rowdeleting" ondatabinding="gridview1_databinding" allowpaging="true" pagesize="10" onpageindexchanging="gridview1_pageindexchanging">             <columns>                 <asp:boundfield datafield="name" itemstyle-width="200px">                     <itemstyle width="200px"></itemstyle>                 </asp:boundfield>                 <asp:boundfield datafield="number" itemstyle-width="200px">                     <itemstyle width="200px"></itemstyle>                 </asp:boundfield>                 <asp:templatefield>                     <itemtemplate>                         <asp:updatepanel id="updatepanel1" runat="server" updatemode="conditional">                             <contenttemplate>                                 <asp:button id="button2" runat="server" text="button" onclick="button2_click" onclientclick="return deleteconfirm();" />                                 <asp:hiddenfield id="hiddenfield2" runat="server" value='<%# bind("name") %>' />                              </contenttemplate>                         </asp:updatepanel>                     </itemtemplate>                 </asp:templatefield>                </columns>         </asp:gridview>         </contenttemplate>         </asp:updatepanel>         <br />         <br />         <br />         <asp:button id="button1" runat="server" onclick="button1_click" text="reset" />     </div>     </form>     <script type="text/javascript">         function deleteconfirm() {             if (confirm("are sure want delete customer excluded customer list ?")) {                 return true;             }             return false;         }     </script> </body> </html> 

aspx.cs

using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; using system.data;  namespace webapplication1 {          public partial class webform1 : system.web.ui.page         {             private  datatable _source;              public webform1()             {                 resetdata();             }              private  void resetdata()             {                _source = new datatable();                _source.columns.add("name", typeof(string));                 _source.columns.add("number", typeof(string));                 random rn = new random();                 (int t = 0; t < 100; t++)                 {                     _source.rows.add(rn.next(1, 10).tostring(), rn.next(1, 10).tostring());                 }              }              protected void page_load(object sender, eventargs e)             {                 if (!ispostback)                     gridview1.databind();             }              protected void gridview1_rowdeleted(object sender, gridviewdeletedeventargs e)             {              }              protected void gridview1_rowdeleting(object sender, gridviewdeleteeventargs e)             {                 _source.rows.removeat(e.rowindex);                 //gridview1.databind();                 response.redirect("~/webform1.aspx");             }              protected void button1_click(object sender, eventargs e)             {                 resetdata();                 gridview1.databind();             }              protected void gridview1_databinding(object sender, eventargs e)             {                 gridview1.datasource = _source;             }              protected void button2_click(object sender, eventargs e)             {                 var button = sender button;                 button.enabled = false;                 var hidden = button.parent.findcontrol("hiddenfield2") hiddenfield;                 var name = hidden.value;                 deletforname(name);             }              protected void gridview1_pageindexchanging(object sender, gridviewpageeventargs e)             {                 gridview1.pageindex = e.newpageindex;                // gridview1.datasource = _source;                 //gridview1.databind();              }             private  void deletforname(string name)             {                 foreach (datarow row in _source.rows)                     if (row["name"].equals(name))                     {                       _source.rows.remove(row);                         break;                     }             }         }     } 

you need store data source between requests. 1 option use session variable:

public partial class webform1 : system.web.ui.page     {         private datatable _source;          public webform1()         {         }          private void resetdata()         {             _source = new datatable();             _source.columns.add("name", typeof(string));             _source.columns.add("number", typeof(string));             random rn = new random();             (int t = 0; t < 100; t++)             {                 _source.rows.add(rn.next(1, 10).tostring(), rn.next(1, 10).tostring());             }              session["data"] = _source;         }          protected void page_load(object sender, eventargs e)         {             if (!ispostback)             {                 resetdata();                 gridview1.databind();             }             _source = session["data"] datatable;         }          protected void gridview1_rowdeleted(object sender, gridviewdeletedeventargs e)         {          }          protected void gridview1_rowdeleting(object sender, gridviewdeleteeventargs e)         {             ((datatable)session["data"]).rows.removeat(e.rowindex);         }          protected void button1_click(object sender, eventargs e)         {             resetdata();             gridview1.databind();         }          protected void gridview1_databinding(object sender, eventargs e)         {              gridview1.datasource = _source;         }          protected void button2_click(object sender, eventargs e)         {             var button = sender button;             button.enabled = false;             var hidden = button.parent.findcontrol("hiddenfield2") hiddenfield;             var name = hidden.value;             deletforname(name);         }          protected void gridview1_pageindexchanging(object sender, gridviewpageeventargs e)         {              gridview1.pageindex = e.newpageindex;             gridview1.databind();          }         private void deletforname(string name)         {              foreach (datarow row in _source.rows)                 if (row["name"].equals(name))                 {                     _source.rows.remove(row);                     break;                 }         }     } 

basically when page loads, if not post back, creates new datatable , stores in session variable. if post back, pulls existing data session variable. also, want call resetdata function when need create new datatable, took out of constructor.

also, sure name column of actual data source unique, because delete function delete first row has name looking for, not row selected deletion.

hope helps!

edit

two possibilities. think want keep deleted data in table, mark deleted , disable delete button in gridview. this, instinct add boolean column table indicates whether row has been deleted or not. when row databound, check if has been deleted , disable button accordingly:

private void deletforname(string name) {      foreach (datarow row in _source.rows)         if (row["name"].equals(name))         {             row["deleted"] = true;             break;         } }  protected void gridview1_rowdatabound(object sender, gridviewroweventargs e) {     if (e.row.rowtype == datacontrolrowtype.datarow)     {         if ((bool)((system.data.datarowview)e.row.dataitem)["deleted"])         {             ((button)e.row.findcontrol("button2")).enabled = false;         }     } } 

if want remove item table still disable button @ index of rows have deleted, little more complicated. let me know if that's case , can try that, seems more above want.


Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -