我正在尝试创建主/详细视图。我的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
以防它以奇怪的顺序发生,但这似乎没有帮助。
答案 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();
}