EntityDataSource过滤

时间:2014-10-02 22:36:35

标签: c# asp.net telerik-grid entitydatasource

这有点痛苦,我觉得这应该很容易。

我有一个EntityDataSource:

<asp:EntityDataSource ID="TaskDataSource" runat="server" ConnectionString="name=ScheduleEntities" DefaultContainerName="ScheduleEntities" EnableFlattening="False" EntitySetName="TaskItems" EnableInsert="True" EnableUpdate="True" OrderBy="it.Duration" Where="it.deleted = False">

我不能为我的生活让它只显示未删除的结果。 OrderBy有效,一切都很好......我只是无法过滤它。

2 个答案:

答案 0 :(得分:0)

您需要在EntityDataSource中将AutoGenerateWhereClause属性设置为true,

<asp:EntityDataSource ID="TaskDataSource" runat="server" ConnectionString="name=ScheduleEntities" DefaultContainerName="ScheduleEntities" EnableFlattening="False" EntitySetName="TaskItems" EnableInsert="True" EnableUpdate="True" OrderBy="it.Duration" Where="it.deleted = False" AutoGenerateWhereClause="true">

答案 1 :(得分:0)

我通过在UI中创建带有过滤器的linqDataSource并采用过滤器格式来实现它,这里是代码:

<asp:EntityDataSource ID="TaskDataSource" runat="server" ConnectionString="name=ScheduleEntities" DefaultContainerName="ScheduleEntities" EnableFlattening="False" EntitySetName="TaskItems" EnableInsert="True" EnableUpdate="True" OrderBy="" Where="deleted == @deleted">
    <WhereParameters>
        <asp:Parameter DefaultValue="False" Name="deleted" Type="Boolean" />
    </WhereParameters>
</asp:EntityDataSource>

但是,我无法最终使用它,因为我还需要在网格上使用动态过滤器,所以我的解决方法是在绑定过程中隐藏行(如果有更有效的方法请更新我!)用这个:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    var editItem = e.Item as GridEditFormItem;
    if (e.Item is GridDataItem && !e.Item.IsInEditMode)
    {
        GridDataItem item = (GridDataItem)e.Item;
        bool success,deleted;
        bool.TryParse(item["deleted"].Text, out success);
        if (success)
        {
            deleted = bool.Parse(item["deleted"].Text);
            if (deleted)
            {
                item.Display = false;
            }
        }
    }
}