我有一个绑定到此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查询的逻辑存在于存储过程中。在这里,逻辑在我的代码隐藏中。
答案 0 :(得分:0)
嗯,没有其他解决方案,这就是我最终做的事情 - 我在页面中添加了一个不可见的标签来保存Where语句。在GridView数据绑定期间,我在那里写入值:
lblunitQueryWhere.Text = unitQuery.Where;
在Page_Load中,我从那里读取并更新了GridView的数据源:
if (IsPostBack)
unitQuery.Where = lblunitQueryWhere.Text;
这样做,我可以保留回发中的Where。