Ok.
e.Row.DataItem <- Dette refererer til det objekt som bliver bundet til rækken, i dette tilfælde er det, det som kommer fra LINQ queryen:
new {
d.RestaurantName,
d.RestaurantAddress,
d.RestaurantPhone,
d.RestaurantWWW,
d.RestaurantImage,
d.RestaurantPostal
}
Dette er et anonymt objekt - eller som CLR'en kalder den:
'<>f__AnonymousType0`5[System.String,System.String,System.Nullable`1[System.Int32],System.String,System.String]'
Dette kan ikke type castes til et DataRowView.
Spørgsmålet er selvfølgelig hvordan kan du så tilgå de enkelte properties og svaret er simpelt. Lav en ny klasse med alle de egenskaber du skal bruge:
public class MinModel {
public String RestaurantName { get; set; }
public String RestaurantAddress { get; set; }
public int? RestaurantPhone { get; set; }
public String RestaurantWWW { get; set; }
public String RestaurantImage { get; set; }
public String RestaurantPostal { get; set; }
}
(Det er meget muligt at jeg har formået at give dine egenskaber de forkerte typer, du må lige selv dobbelt chekke det.
I din LINQ query, i stedet for at lave et nyt anonymt objekt og select'e de, så selecter du i stedet et nyt "MinModel" objekt:
from .... where ... orderby ... select new MinModel() {
RestaurantName = d.RestaurantName,
...
...
...
...
...
}
Og i stedet for at type caste til DataRowView, typecaster du til MinModel
DataRowView drv = (MinModel)e.Row.DataItem;
Når du så skal bruge en egenskab fra drv skal du ikke bruge drv["egenskab"] men drv.egenskab.
Håber det hjælper.