2015-12-29 1 views
0

J'ai une liste de données pour afficher des tonnes d'articles, donc j'utilise pagination et méthode de recherche afin de filtrer et le rend plus facile, les deux fonctionnent bien. Cependant, en matière de recherche de personnes après la recherche, les données seront de retour à (SELECT *), mais pas l'im élément spécifique recherchantDataList pagination avec résultat de recherche

ce que je fait jusqu'à présent:

SqlDataAdapter adap; 
    DataSet ds; 
    PagedDataSource adsource; 
    int pos; 

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      this.ViewState["vs"] = 0; 
      pos = (int)this.ViewState["vs"]; 

      databind(); 
      databind2(); 
     } 
    } 

public void databind() 
    { 
     adap = new SqlDataAdapter("select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice from plu p inner join item i on p.item_code = i.item_code WHERE p.publish =1 order by i.LongDesc", constr); 
     ds = new DataSet(); 
     adsource = new PagedDataSource(); 
     adap.Fill(ds); 
     adsource.DataSource = ds.Tables[0].DefaultView; 
     adsource.PageSize = 16; 
     adsource.AllowPaging = true; 
     adsource.CurrentPageIndex = pos; 
     CategoryList.DataSource = adsource; 
     CategoryList.DataBind(); 
    } 

la partie filtre présente comme ci-dessous

public void Filter_Command(Object source, DataListCommandEventArgs e) 
    { 
     if (e.CommandName.Equals("Filter")) 
     { 
      adap = new SqlDataAdapter("select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice, d.department_code as dcode, d.category_code as dcatecode, c.category_code as ccode from plu p inner join item i on p.item_code = i.item_code inner join EPO_PDU_department d on d.department_code = i.department_code inner join EPO_PDU_Category c on c.category_code = d.category_code WHERE p.publish =1 AND c.category_code = '" + e.CommandArgument.ToString() + "'order by i.LongDesc ", constr); 
      ds = new DataSet(); 
      adsource = new PagedDataSource(); 
      adap.Fill(ds); 
      adsource.DataSource = ds.Tables[0].DefaultView; 
      adsource.PageSize = 16; 
      adsource.AllowPaging = true; 
      adsource.CurrentPageIndex = pos; 
      btnprevious.Enabled = !adsource.IsFirstPage; 
      btnnext.Enabled = !adsource.IsLastPage; 
      CategoryList.DataSource = adsource; 
      CategoryList.DataBind(); 
     } 
    } 

boutons que j'ai utilisé:

protected void btnprevious_Click(object sender, EventArgs e) 
    { 
     pos = (int)this.ViewState["vs"]; 
     pos -= 1; 
     this.ViewState["vs"] = pos; 
     databind(); 
    } 

    protected void btnnext_Click(object sender, EventArgs e) 
    { 
     pos = (int)this.ViewState["vs"]; 
     pos += 1; 
     this.ViewState["vs"] = pos; 
     databind(); 
    } 

recherche et la pagination travaillent bien sans l'autre. mais je voudrais qu'ils travaillent ensemble. grâce

MISE À JOUR ******* *******

dans le cas où Rik a besoin de plus d'informations the errors occurred

+0

Après le clic de clic, vous liez les données non filtrées 'databind()' – Rik

+0

je l'ai remarqué mais je ne sais pas comment dois-je réparer cela – TheButterfly

+0

Faites votre filtre de données appliquer le filtre le cas échéant – Rik

Répondre

1

Assurez-vous Databind Appliquer le filtre, le cas échéant

public void databind(string filter = null) 
{ 
    var filterQuery = ""; 
    if(!string.IsNullOrEmpty(filter)){ 
     filterQuery = " AND c.category_code = '" + filter + "'"; 
     this.ViewState.ContainsKey("filter") 
      ? this.ViewState["filter"] = filter 
      : this.ViewState.Add("filter", filter); 
    } 

    var query = "select p.item_code as pitem, i.LongDesc as longname, p.SellPrice_1 as normalprice, p.SellPrice_2 as memberprice from plu p inner join item i on p.item_code = i.item_code WHERE p.publish =1"; 
    query += filterQuery; 
    query += " order by i.LongDesc"; 

    adap = new SqlDataAdapter(query, constr); 
    ds = new DataSet(); 
    adsource = new PagedDataSource(); 
    adap.Fill(ds); 
    adsource.DataSource = ds.Tables[0].DefaultView; 
    adsource.PageSize = 16; 
    adsource.AllowPaging = true; 
    adsource.CurrentPageIndex = pos; 
    CategoryList.DataSource = adsource; 
    CategoryList.DataBind(); 
} 

puis commande filtre:

public void Filter_Command(Object source, DataListCommandEventArgs e) 
{ 
    string filter = e.CommandName.Equals("Filter") ? e.CommandArgument.ToString() : null; 
    databind(filter); 
} 

et vos boutons

protected void btnprevious_Click(object sender, EventArgs e) 
{ 
    pos = (int)this.ViewState["vs"]; 
    pos -= 1; 
    this.ViewState["vs"] = pos; 
    databind(this.ViewState["filter"]); 
} 

protected void btnnext_Click(object sender, EventArgs e) 
{ 
    pos = (int)this.ViewState["vs"]; 
    pos += 1; 
    this.ViewState["vs"] = pos; 
    databind(this.ViewState["filter"]); 
} 

Assurez-vous this.ViewState["filter"] est défini (Vous pouvez faire le même que pour votre this.ViewState["vs"]

+0

code intéressant, mais il me montre que filterSource et filterEvents ne sont pas encore déclarer, alors devrais-je? – TheButterfly

+0

votre édition a 2 viewstate au bouton, je crois que le mot filtre dans le bouton appartient à databind droite? il doit être déclaré ou il devrait être filter = this.ViewState ["filter"]; ??? – TheButterfly

+0

Désolé, je suis un peu à l'heure. Vous devriez également faire quelques vérifications sur le filtre viewstate. Viewstate est un tableau donc c'est ok. Je vais mettre à jour cet après-midi. J'espère que cela vous mènera. – Rik

0

Vous pouvez créer une fonction générique DataBind qui attend des paramètres pour la recherche aussi . .. puis utilisez cette fonction partout.

+0

voulez-vous dire que je peux réellement définir "WHERE item = ???" à la base de données et ainsi quand je recherche et la pagination se poursuivra sans problème? je fatigué que, mais malheureusement im en utilisant e.command ("filtre") donc je ne suis pas capable de faire comme la méthode – TheButterfly