在回发后丢失WHERE语句的EntityDataSource

时间:2013-05-28 03:00:20

标签: c# asp.net entity-framework entitydatasource

我有一个绑定到此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之类的kludge之外,有没有办法在回发期间保留Where语句的值?

或许有更好的方法可以使用EntityFramework进行动态查询。我习惯使用SqlDataSources并将它们附加到存储过程并传递参数,这样就可以了。但是,查询正确表的SQL查询的逻辑存在于存储过程中。在这里,逻辑在我的代码隐藏中。

1 个答案:

答案 0 :(得分:0)

嗯,没有其他解决方案,这就是我最终做的事情 - 我在页面中添加了一个不可见的标签来保存Where语句。在GridView数据绑定期间,我在那里写入值:

lblunitQueryWhere.Text = unitQuery.Where;

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

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

这样做,我可以保留回发中的Where。