#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 статья о типовом переплете.