Невозможно использовать элемент повторителя в функции «Связанный элемент» - PullRequest
0 голосов
/ 23 октября 2018

Исключение «МОЙ код» для повторителя itemDataBound

Дополнительная информация: Невозможно привести объект типа '<> f__AnonymousType4`18 [System.String, System.Int64, System.String, System.String, System.String, System.String, System.Int32, System.Int32, System.Decimal, System.Int32, System.Decimal, System.Decimal, System.Int32, System.Int32, System.Int32, System.Decimal, система.String, System.Boolean] 'для ввода' System.Data.DataRowView '.

  public void GetUploadFIlesDetils_Level2() 
    {
       var result2 = from t in dt.AsEnumerable()
                          where t.Field<string>("PracticeName") == practiceName  && t.Field<string>("Provider") == Provider
                          select new
                          {  
                              PracticeName = t.Field<string>("PracticeName"),
                              FileId = t.Field<long>("UploadFIlesID"),
                              FileName = t.Field<string>("FileName")
    }

    rptlevel2.DataSource = result2;
        rptlevel2.DataBind();

    }

Моя функция ItemDataBound:

  protected void rptlevel2_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {

          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    DataRowView drv = (DataRowView)e.Item.DataItem;
    }}

1 Ответ

0 голосов
/ 23 октября 2018

Вместо того чтобы использовать анонимный тип для проецирования в DataRowView, лучше создать класс модели, у которого все его свойства имеют то же имя, что и у проецируемых свойств:

public class Practice
{
    public string PracticeName { get; set; }
    public long FileId { get; set; }
    public string FileName { get; set; }
}

Затем измените запрос так, чтобы он содержалкласс модели:

var result2 = from t in dt.AsEnumerable()
              where t.Field<string>("PracticeName") == practiceName  && t.Field<string>("Provider") == Provider
              select new Practice // add the model class name here
              {  
                   PracticeName = t.Field<string>("PracticeName"),
                   FileId = t.Field<long>("UploadFIlesID"),
                   FileName = t.Field<string>("FileName")
              };

Наконец, используйте имя класса модели, как упомянуто выше, для приведения из объекта DataItem для получения соответствующего экземпляра строки:

Practice practice = (Practice)e.Item.DataItem;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...