ControlParameter返回之前的值?

时间:2016-01-07 19:41:19

标签: c# asp.net gridview webforms

我正在尝试创建主/详细视图。我的DetailsView工作正常且在其自己的页面上,显示我的GridView的{​​{1}}也能正常工作。我可以使用EquipmentDataSource

过滤GridView
FilterParamaters

(我理解动态Linq表达式作为控件名称是糟糕的设计)

当我尝试根据<FilterParameters> <%-- ControlParameter.Name will String.Formatted with the control's value --%> <asp:ControlParameter Type="String" Name='eEquipment.Contains("{0}")' ControlID="txtNumber" PropertyName="Text" /> </FilterParameters> 显示的项目的键进行过滤时,问题就出现了。如果我切换到PO#为123,然后是456的项目,DetailsView将评估为123.我认为它可能是从ViewState获取值而不是控件当前具有的值,但我不知道这是为什么。

代码:

ControlParameter

我在<cc:ProcurementDataSource ID="dsProcurements" runat="server" /> <asp:DetailsView ID="dtvProcurements" runat="server" AllowPaging="True" DataSourceID="dsProcurements" /> <cc:EquipmentDataSource ID="dsEquipment" runat="server"> <FilterParameters> <asp:ControlParameter Type="String" Name='ePO == "{0}"' ControlID="dtvProcurements" PropertyName="DataItem.epClientPO" /> </FilterParameters> </cc:EquipmentDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="dsEquipment" /> 上呼叫Page.DataBind()。我尝试在每个控件上手动调用Page_Load以防它以奇怪的顺序发生,但这似乎没有帮助。

1 个答案:

答案 0 :(得分:0)

看起来我对Control.DataBind()是否阻止感到困惑。

protected void Page_Load(object sender, EventArgs e)
{
    AutoMapperConfiguration.Initialize();
    dtvProcurements.DataBind();
    GridView1.DataBind();
}
如果这样做,

无法正常工作:

protected void Page_Load(object sender, EventArgs e)
{
    AutoMapperConfiguration.Initialize();
    dtvProcurements.DataBind();
}

protected void dtvProcurements_DataBound(object sender, EventArgs e)
{
    GridView1.DataBind();
}