Применить фильтрацию в ListView

#c# #asp.net #entity-framework #listview

#c# #asp.net #entity-framework #listview

Вопрос:

У меня есть ListView, и я хочу применить в нем функциональность фильтрации.

 <asp:ListView runat="server" ID="CollegeDetailsView"
    DataKeyNames="CollegeID" ItemType="CollegeDataLibrary.CollegeDetail"
    AutoGenerateColumns="false" ItemPlaceholderID="CollegeItem"
    AllowPaging="true" AllowSorting="true"
    SelectMethod="GetData" OnItemDataBound="CollegeDetailsView_ItemDataBound">
    <EmptyDataTemplate>
        There are no entries found for Colleges
    </EmptyDataTemplate>
    <LayoutTemplate>
  

Метод getData:

 public IQueryable<CollegeDataLibrary.CollegeDetail> GetData()
    {
        var context = DataOperations.GetCollegeDetails();
        return context.AsQueryable();
    }
  

Я взял два выпадающих списка, в которых, если пользователь выберет оба или одно значение, в listview будет отображаться соответствующая запись. Я применил следующий код:

 protected void SearchField_Click(object sender, EventArgs e)
    {
        string Created = DDLCreatedBy.SelectedItem.Value;
        string Fdp = DDLFDP.SelectedItem.Value;
        var context = DataOperations.GetFilteredData(Created, Fdp);
        CollegeDetailsView.DataSource = context.ToList();
        CollegeDetailsView.DataBind();
    }   
  

Метод GetFilteredData:

  public List<CollegeDetail> GetFilteredData(string Created, string FDP)
    {
        using (CollegeDataEntities context = new CollegeDataEntities())
        {
            return context.CollegeDetails.Where(cs => cs.CreatedBy == Created amp;amp; cs.FDP == FDP).ToList();
        }
    }
  

Контекст имеет точные значения, но после привязки он показывает следующую ошибку:

введите описание изображения здесь

Ответ №1:

Вы видите эту ошибку, потому что пытаетесь связать ListView двумя способами. Вы используете подход привязки модели в своей разметке и устанавливаете DataSource вручную в своем коде.

Одна вещь, которую вы могли бы попытаться сделать, это удалить привязку модели и просто привязать ее вручную. Удалите ItemType и SelectMethod и вместо этого просто вызовите getData в вашем Page_Load или что-то в этом роде.

 protected void Page_Load(object sender, EventArgs e)
{
    CollegeDetailsView.DataSource = GetData();
    CollegeDetailsView.DataBind();
}
  

Тогда ваша другая фильтрация должна работать как есть, при условии, что фильтрация настроена правильно. Другая вещь, которую вы могли бы попробовать, очевидно, противоположна — придерживаться только привязки модели и удалять всю ручную привязку. Вот asp.net статья о типовом переплете.