在ListView中应用过滤

时间:2014-06-25 10:04:40

标签: 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 && cs.FDP == FDP).ToList();
        }
    }

上下文具有确切的值,但在绑定后显示以下错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

您正在看到该错误,因为您尝试以两种方式绑定ListView。您正在标记中使用模型绑定方法,并在您的代码中手动设置DataSource

您可以尝试做的一件事是删除模型绑定并坚持手动绑定它。移除ItemTypeSelectMethod,而只是在Page_Load或其他内容中调用GetData。

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

然后您的其他过滤应该按原样运行,假设过滤设置正确。您可以尝试的另一件事显然是相反的 - 坚持模型绑定并删除所有手动绑定。这是一个asp.net article on model binding