IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

gridview, tri, impossible de trouver la colonne []


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut gridview, tri, impossible de trouver la colonne []
    bonjour,

    j'ai une gridview relié a une sqldatasource
    le "selectcommand" de ce datasource change en fonction d'une dropdownlist, jusque là tout va bien, quand je change d'item, la gridview affiche correctement les nouvelles données

    en revanche, lorsque je tri la gridview en cliquant sur le titre de la colonne, si je change d'item de la liste pour afficher de nouvelle donnée
    je prend une belle erreur "impossible de trouver la colonne X"
    X étant la première colonne de la nouvelle table à afficher

    la gridview est en "autogeneratecolomns = true"

    j'ai du code dans les evenements
    GridView1_RowDataBound
    GridView1_PreRender
    GridView1_RowCreated
    il s'agit de code pour generer des boutons dans les header et quelques fonctions pour que ce ne soit pas trop moche

    le problème peut-il venir de là ?
    j'ai beau chercher, je ne vois pas d'où ça peut venir

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    petite précision

    en fait, la colonne "introuvable" est la dernière qui a été triée
    le problème viendrait donc du tri
    j'ai trouvé une proprieté interessante du gridview

    gridview.SortExpression

    en changeant de source, le sortexpression ne semble pas se réinitialisé, donc normal qu'il ne trouve pas la colonne dans les nouvelles données

    par contre la méthode est en get, et du coup je ne vois pas comment la remettre à null avant de changer de source

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Tout dépends comment est construit ton gridview. soit par l'assistant soit entièrement par code behind.

    Je ne sais pas combien d'éléments il y a dans la dropdownlist, mais s'il n'y en a pas beaucoup tu pourrais peut etre afficher un autre gridview, dans ce cas là tu n'aurais pas de problème de tri vu que cela te genère un nouveau gridview.

    Sinan tu peux tjs essayer de mettre le gridview a null et de refaire un databind derrière

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    il y a environ 60 elements dans la liste

    j'ai déjà essayé de le gridview à null et rebind apres, mais sans succes
    ou alors peut etre pas au bon endroit

    vu la trace error suivante, je pense qu'il s'agit bien d'un problème de sortexpression du gridview

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [IndexOutOfRangeException: Impossible de trouver la colonne Firm_Name.]
       System.Data.DataTable.ParseSortString(String sortString) +1862070
       System.Data.DataView.CheckSort(String sort) +28
       System.Data.DataView.set_Sort(String value) +137
       System.Web.UI.WebControls.FilteredDataSetHelper.CreateFilteredDataView(DataTable table, String sortExpression, String filterExpression, IDictionary filterParameters) +96
       System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +2189
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
       System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
       System.Web.UI.WebControls.GridView.DataBind() +4
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
       System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +24
       System.Web.UI.Control.PreRenderRecursiveInternal() +86
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Control.PreRenderRecursiveInternal() +170
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2041

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    pour répondre à ta question, le gridview est construit à la fois par l'assistant et par du code behind

    ci joint le code asp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
                            AllowSorting="True" CssClass="GridView" DataSourceID="SqlDataSource1" 
                            EnableTheming="True" onpageindexchanging="GridView1_PageIndexChanging" 
                            onprerender="GridView1_PreRender" onrowcreated="GridView1_RowCreated" 
                            onrowdatabound="GridView1_RowDataBound" onsorting="GridView1_Sorting" 
                            onsorted="GridView1_Sorted" 
                            onselectedindexchanged="GridView1_SelectedIndexChanged">
                            <PagerSettings Mode="NumericFirstLast" />
                            <HeaderStyle CssClass="HeaderStyle" />
                        </asp:GridView>
    et le code behind

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if ((e.Row != null) && e.Row.RowType == DataControlRowType.Header)
            {
                int i = 1;     
                foreach (TableCell cell in e.Row.Cells)
                {
                    DataControlFieldHeaderCell dcfhc = (DataControlFieldHeaderCell)e.Row.Controls[i - 1];
                    string colname = dcfhc.ContainingField.HeaderText;
     
                    TextBox tx = new TextBox();
                    tx.Attributes.Add("onkeydown", "bt_click(event,this.id)");
                    tx.ID = "TBx" + i.ToString();
                    tx.AutoPostBack = false;
                    cell.Controls.Add(tx);
     
                    ImageButton ImgBtn = new ImageButton();
                    ImgBtn.ImageUrl = "img/icon/loupe.png";
                    ImgBtn.ID = "ImgBtnA" + i.ToString();
                    ImgBtn.Click += new ImageClickEventHandler(ImageButton_Click);
                    cell.Controls.Add(ImgBtn);
     
                    ImageButton ImgBtn2 = new ImageButton();
                    /*
                    if (GridView1.SortDirection == SortDirection.Ascending)
                        ImgBtn2.ImageUrl = "img/icon/Down.png";
                    else
                        ImgBtn2.ImageUrl = "img/icon/Up.png";
                    */
                    ImgBtn2.ImageUrl = "img/icon/Up.png";
                    ImgBtn2.ID = "ImgBtnB" + i.ToString();
                    /*ImgBtn2.CommandName = "Sort";
                    ImgBtn2.CommandArgument = colname;*/
                    ImgBtn2.Click += new ImageClickEventHandler(ImageButtonSortUp_Click);
                    cell.Controls.Add(ImgBtn2);
     
                    ImageButton ImgBtn3 = new ImageButton();
                    ImgBtn3.ImageUrl = "img/icon/Down.png";
                    ImgBtn3.ID = "ImgBtnC" + i.ToString();
                    ImgBtn3.Click += new ImageClickEventHandler(ImageButtonSortDown_Click);
                    cell.Controls.Add(ImgBtn3);
     
                    i++;
                }
            }
            if ((e.Row != null) && e.Row.RowType == DataControlRowType.DataRow)
            {
                GridViewRow row = e.Row;
                row.Attributes.Add("onclick","GridView1_SelectedIndexChanged");
     
                //e.Row.Attributes.Add("onmouseout", "this.className='GridView'");            
                //e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this, "Select$" + e.Row.RowIndex);
            }
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            SqlDataSource1.SelectCommand = (String)Session["def3"];
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onmouseover", "this.className='hightlighrow';this.style.cursor='hand';");
                e.Row.Attributes.Add("onmouseout", "this.className='GridView'");
     
                //e.Row.Attributes["OnClick"] = ClientScript.GetPostBackEventReference(this,"Select$" + e.Row.RowIndex);            
            }
        }

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/06/2008, 22h43
  2. Impossible de trouver la procédure stockée
    Par yann47 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/02/2005, 22h47
  3. [Plugin][MYECLIPSE]Impossible de trouver une JVM
    Par tolsam dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 08/08/2004, 20h46
  4. Impossible de trouver la procédure stockée
    Par engi dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 12/05/2004, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo