Accéder aux colonnes de l’événement ItemDataBound lorsque la source de données est Linq

En définissant la source de données avec le code suivant:

protected void Page_Load(object sender, EventArgs e) { var vacancies = from v in db.Vacancies join c in db.Customers on v.CustomerID equals c.CustomerID join cp in db.CustomerPortals on c.CustomerID equals cp.CustomerID where cp.PortalID == Master.Portal.ID select new { Title = v.Title, Internship = (v.ContractID == 6), Hours = v.Hours, City = v.Customer.City.Name, Degree = v.Degree.Title, Contract = v.Contract.Title, CustomerID = v.CustomerID }; rVacancies.ItemDataBound += new RepeaterItemEventHandler(rVacancies_ItemDataBound); rVacancies.DataSource = vacancies; rVacancies.DataBind(); } 

Maintenant, je veux savoir comment accéder à l’une des colonnes (comme CustomerID) à partir de l’événement ItemDataBound.

  void rVacancies_ItemDataBound(object sender, RepeaterItemEventArgs e) { // This doesnt seem to work, row would be null even though e.Item.DataItem has a value. DataRow row = (DataRow)e.Item.DataItem; } 

J’ai compris que e.Item.DataItem contient tous les champs de ma requête et le type de e.Item.DataItem est

 f__AnonymousType8 

Vous ne liez pas de données à votre contrôle (vous liez un type anonyme), vous ne devez donc pas convertir DataItem en DataRow.

Essayez d’obtenir les données de votre ligne comme:

 var dataItem = e.Item.DataItem; // For example get your CustomerID as you defined at your anonymous type : ssortingng customerId = dataItem.CustomerID; 

Enfin trouvé, était aussi simple que ce qui suit:

 long customerID = long.Parse(DataBinder.Eval(e.Item.DataItem, "CustomerID").ToSsortingng()); 

Cette approche .Net 4.0 est également très cool!

 public void PersonDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { dynamic person = e.Item.DataItem as dynamic; ssortingng name = person.Name; int age = person.Age; } } 

All Credit To: http://www.kristofclaes.be/blog/2010/08/12/anonymous-types-and-the-itemdatabound-event/

Comme la page affiche maintenant une erreur 404, voici la page de Wayback Machine: Types anonymes et l’événement ItemDataBound (version archivée)