c# - EntityDataSource 在回发后丢失 WHERE 语句

标签 c# asp.net entity-framework entitydatasource

我有一个绑定(bind)到这个 EntityDataSource 的 GridView:

<asp:EntityDataSource ID="lotDetailQuery" runat="server" ViewStateMode="Enabled" 
    ConnectionString="name=encoreEntities" DefaultContainerName="encoreEntities"
    EnableFlattening="False" EntitySetName="lotdetails" Include="lot, lot.salesorder" 
    Where="false" OrderBy="it.lotdetaildate">           
    <WhereParameters>
        <asp:Parameter Name="OrderNum" Type="String" />
        <asp:Parameter Name="BoxNum" Type="String" />
        <asp:Parameter Name="SerialNum" Type="String" />
        <asp:Parameter Name="InvoiceNum" Type="String" />
        <asp:ControlParameter Name="DateFrom" ControlID="txtDateFrom" Type="DateTime" />
        <asp:Parameter Name="DateTo" Type="DateTime" />
    </WhereParameters>   
</asp:EntityDataSource></asp:Content>

在代码隐藏中,我设置了 WhereParameters 和 Where 语句的值。 (例如,如果用户搜索 BoxNum JLS001,则 Where 语句设置为“it.boxnum = @BoxNum”,WhereParam BoxNum 设置为 JLS001。当用户搜索时,gridview 工作正常。

当用户使用我提供的删除按钮删除其中一条记录时,问题就出现了。删除后,我尝试用 GridView.DataBind() 刷新 gridview。回发完成后,gridview 为空。

我发现,虽然 WhereParameters 在回发后仍然存在(BoxNum 仍设置为 JLS001),但 Where 语句却没有。回发后,此语句设置为“false”,就像页面最初加载时一样。

除了像将 Where 语句写入不可见标签然后将其复制到 EntityDataSource 这样的困惑之外,有没有办法在回发期间保留 Where 语句的值?

或者也许有更好的方法来使用 EntityFramework 的动态查询。我习惯于使用 SqlDataSources 并将它们附加到存储过程并传递参数,并且这种方式工作得很好。不过,查询正确表的 SQL 查询逻辑驻留在存储过程中。在这里,逻辑在我的代码隐藏中。

最佳答案

好吧,除了另一种解决方案,这就是我最终所做的 - 我向页面添加了一个不可见的标签来保存 Where 语句。在 GridView 数据绑定(bind)期间,我将值写在那里:

lblunitQueryWhere.Text = unitQuery.Where;

在 Page_Load 中,我从那里读取它并更新 GridView 的数据源:

if (IsPostBack)
            unitQuery.Where = lblunitQueryWhere.Text;

这样做,我可以在回传中保留 Where。

关于c# - EntityDataSource 在回发后丢失 WHERE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783221/

相关文章:

c# - Entity Framework 代码首先未将对象引用设置为对象的实例

c# - XSLT 转换 : Updating nodes of output xml

c# - 接口(interface)和 header

asp.net - IISHandler错误未实现接口(interface)成员 'System.Web.IHttpHandler.IsReusable',

表单例份验证重定向后 ASP.net 页面继续加载

c# - HTML 标签如何转换为 HtmlControl?

c# - 如何使用 C#-Unity 将 Json 文件转换为字典

c# - 无法使用 MVVM 在 WPF 中填写 ListBox

c# - 带有 IdentityDbContext 的 EF6 多对多无效列名

c# - EF Code First 使用 IEnumerable <> 进行递归查询?