2

我有一个绑定到这个 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 查询的逻辑驻留在存储过程中。在这里,逻辑在我的代码隐藏中。

4

1 回答 1

0

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

lblunitQueryWhere.Text = unitQuery.Where;

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

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

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

于 2013-06-07T15:23:13.703 回答