2010-02-06 7 views
2

Salutations tous,Trouble with LINQ à GridView et DataBind RowDataBound

Je travaille sur la refonte de mon site Web personnel en utilisant VS 2008 et ont choisi d'utiliser LINQ pour créer par la couche d'accès aux données. Une partie de mon site sera une petite application pour mieux gérer mon budget. Ma première requête LINQ n'exécute avec succès et l'affichage dans un GridView, mais lorsque je tente d'utiliser un événement RowDataBound pour travailler avec les résultats et les affiner un peu, je reçois l'erreur:

The type or namespace name ' var ' could not be found (are you missing a using directive or an assembly reference?)

Cette partie intéressante est, si j'essaie juste de mettre un var s = "s"; n'importe où ailleurs dans le même fichier, j'obtiens la même erreur aussi. Si je vais à d'autres fichiers dans le projet Web, var s = "s"; se compile bien.

Voici l'appel de requête LINQ:

public static IQueryable pubGetRecentTransactions(int param_accountid) 
{ 
    clsDataContext db; 

    db = new clsDataContext(); 

    var query = from d in db.tblMoneyTransactions 
       join p in db.tblMoneyTransactions on d.iParentTransID equals p.iTransID into dp 
       from p in dp.DefaultIfEmpty() 
       where d.iAccountID == param_accountid 
       orderby d.dtTransDate descending, d.iTransID ascending 
       select new 
       { 
        d.iTransID, 
        d.dtTransDate, 
        sTransDesc = p != null ? p.sTransDesc : d.sTransDesc, 
        d.sTransMemo, 
        d.mTransAmt, 
        d.iCheckNum, 
        d.iParentTransID, 
        d.iReconciled, 
        d.bIsTransfer 
       }; 

    return query; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     this.prvLoadData(); 
    } 
} 

internal void prvLoadData() 
{ 
    prvCtlGridTransactions.DataSource = clsMoneyTransactions.pubGetRecentTransactions(2); 

    prvCtlGridTransactions.DataBind(); 
} 


protected void prvCtlGridTransactions_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var datarow = e.Row.DataItem; 
     var s = "s"; 

     e.Row.Cells[0].Text = datarow.dtTransDate.ToShortDateString(); 
     e.Row.Cells[1].Text = datarow.sTransDesc; 
     e.Row.Cells[2].Text = datarow.mTransAmt.ToString("c"); 
     e.Row.Cells[3].Text = datarow.iReconciled.ToString(); 
    }//end if 
}//end RowDataBound 

Mon googler à ce jour n'a pas trouvé une bonne réponse, je cède la parole à cette communauté de confiance. J'apprécie votre temps à m'aider.

+0

Est-ce un projet de site Web ou d'application Web? –

+0

Ceci est un projet de site Web. – Michael

Répondre

0

Cela me semble plutôt étrange, var est un mot-clé de langue, mais de toute façon le compilateur le traite comme un type dans ce cas. Puisque vous avez (avec succès) utilisé var dans pubGetRecentTransactions() je suppose que vous compilez contre .NET 3.5, non?

VS fait parfois des choses très bizarres. Avez-vous essayé de redémarrer VS et de faire une reconstruction complète après?

+0

Oui, j'ai vérifié le projet Web et sa cible est définie sur 3.5. Juste essayé de redémarrer et faire la reconstruction complète - même erreur. – Michael

+0

Nouvelle info: J'ai supprimé la ligne "var" qui me donnait des erreurs, et la var s = "s"; ligne qui semblait auparavant bien alors commencé à lancer des erreurs de compilation aussi. J'ai donc commenté toutes les variables afin que je puisse compiler, et ajouté un <% var s = "s"; %> à l'une des pages ASPX, et a obtenu la même erreur, mais trouvé particulièrement intéressant: C: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE> «C: \ WINDOWS \ Microsoft.NET \ Framework \ v2 .0.50727 \ csc.exe "/ t: bibliothèque/utf8output etc ... etc ... Maintenant, la question est de savoir pourquoi à la fois VS et ASP.Net semblent utiliser la mauvaise version du compilateur? – Michael

+0

Eh bien, la bonne nouvelle est que j'ai compilé le projet de site Web en 3.5. Terminé en supprimant toutes les références, en commentant le code 3.5, en changeant la cible en 2.0, en construisant, en revenant à 3.5, en décommentant le code, en ajoutant des références, et ensuite construit avec le "var". Allez comprendre ... – Michael