Probleme avec pageindexselecting

vitruve - 7 oct. 2017 à 14:19
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 8 oct. 2017 à 00:57
Bonjour, mon probleme est le suivant. J'ai un gridview, avec pagination, qui affiche des données filtrées provenant de sql server. Un bouton placé dans la page me permet d'afficher dans ce gridview la totalité des données de la table sql server. Le probleme est que lorsque j'affiche la totalité des données dans le gridview et que je cherche à aller sur la page 2, je me retrouve avec les données filgtrées. Quelqu'un aurait il la solution ? Merci par avance de votre aide.

Voici mon code aspx :
                <asp:Button ID="btnTteLivraisons" CssClass="btn btn-success" runat="server" Text="Toutes les livraisons" OnClick="btnTteLivraisons_Click" Visible="False"  />
<asp:GridView ID="GridView1" runat="server" CssClass="mydatagrid" PagerStyle-CssClass="pager"
HeaderStyle-CssClass="header" RowStyle-CssClass="rows" AllowPaging="True"
OnPageIndexChanging="GridView1_PageIndexChanging" OnSorting="GridView1_Sorting"
AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None" Width="100%">
<SelectedRowStyle BackColor="#C5BBAF" />
<AlternatingRowStyle BackColor="White" />

<HeaderStyle HorizontalAlign="center" />
<Columns>
<asp:BoundField DataField="Nom" HeaderText="Nom" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="Prenom" HeaderText="Prénom" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="CP" HeaderText="Code Postal" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="ville" HeaderText="Ville" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="Telephone" HeaderText="Téléphone" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="date_command2" HeaderText="Date Commande" DataFormatString="<%$AppSettings:FormatDateGrille%>" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="heure_command" HeaderText="Heure Commande" ItemStyle-HorizontalAlign="center" />
<asp:BoundField DataField="montantCommande" HeaderText="Montant de la Commande" ItemStyle-HorizontalAlign="center" />
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Button id="btnCommande" runat="server" Text="Détail Commande" OnClick="btnCommande_Click" CommandArgument='<%# Eval("ID") %>' class="btn btn-info" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Button id="btnEdit" runat="server" Text="Editer" OnClick="Edit" CommandArgument='<%# Eval("ID") %>' class="btn btn-primary" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Button ID="btnSupprimer" runat="server" Text="Supprimer" OnClick="Delete" CommandArgument='<%# Eval("ID") %>' CssClass="btn btn-danger" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>


Code behind :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.AllowPaging = true;
GridView1.PageSize = 15;

//Enable the gridview sorting option.
GridView1.AllowSorting = true;

//Initialize the sorting expression
ViewState["SortExpression"] = "ID ASC";

BindInfoLivraison();
btnLivraisonToday.Visible = false;
btnTteLivraisons.Visible = true;
}
}

public static DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);

//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
//put a breakpoint here and check datatable
return dataTable;
}

private void BindInfoLivraison()
{
using (RestauDBEntities1 db = new RestauDBEntities1())
{
if (db.InfoLivraison.Count() > 0)
{
DateTime today = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));

List<InfoLivraison> list = (from infoLiv in db.InfoLivraison where infoLiv.date_command2 == today select infoLiv).ToList();

DataTable dt = ToDataTable<InfoLivraison>(list);

ViewState["livraison"] = dt;

GridView1.DataSource = dt;
GridView1.DataBind();

}
else
{
GridView1.DataSource = null;
GridView1.DataBind();
}
}
}

private void BindInfoLivraisonTotal()
{
DataTable dt = new DataTable();
using (RestauDBEntities1 db = new RestauDBEntities1())
{
if (db.InfoLivraison.Count() > 0)
{
//string today = DateTime.Now.ToString("d");
GridView1.DataSource = (from infoLiv in db.InfoLivraison select infoLiv).ToList();
GridView1.DataBind();
}
else
{
GridView1.DataSource = null;
GridView1.DataBind();
}
}
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
if (ViewState["livraison"] != null)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = ViewState["livraison"];
GridView1.DataBind();
}
}

1 réponse

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 oct. 2017 à 00:57
Bonsoir

je ne connais pas ASP, mais C# oui.

Ceci
DateTime today = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
ne sert à rien, la clase DateTime sait te dire juste le jour:
DateTime today = DateTime.Now.Date;




                    List<InfoLivraison> list = (from infoLiv in db.InfoLivraison where infoLiv.date_command2 == today select infoLiv).ToList();

                    DataTable dt = ToDataTable<InfoLivraison>(list);

                    ViewState["livraison"] = dt;

                    GridView1.DataSource = dt;

Si le gridiwiew fonctionne comme en c# (WPF), alors passer par un DataTable est inutile, ceci
 GridView1.DataSource = list;
devrait faire la même chose Par contre comme je ne sais pas ce qu'est ViewState, je ne peux pas te dire si pour lui, un datatable est indispensable ou pas.

Ici, as tu essayé ça:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            if (ViewState["livraison"] != null)
            {
                GridView1.PageIndex = e.NewPageIndex;
            }
        }
?
0
Rejoignez-nous