很确定我知道为什么会出现错误,只是不确定如何修复它。在 FormView ItemTemplate 中,我有一个绑定到 FormView 的 SQLDatasource 的项目 ID# 的 Label 控件。我还有一个 DropDownList,它的 SQLDatasource 我与 Label.Text 作为 ControlParameter 绑定在一起。我猜,因为标签控件尚未绑定,这导致我的 DDL 踢出该错误。
.ASPX
<asp:FormView ID="FvChangeOrder" runat="server" DataKeyNames="ProjectChangeOrderID"
DataSourceID="FvChangeOrderSQL" OnItemCommand="FvChangeOrder_OnItemCommand"
OnDataBound="FvChangeOrder_OnDataBound">
<ItemTemplate>
<div>Project #: </div>
<div>
<asp:Label ID="LblProjectID" runat="server" Text='<%# Bind("ProjectID") %>' /></div>
<div>Shipment #: </div>
<div>
<asp:DropDownList runat="server" ID="DdlShipment" DataSourceID="DdlShipmentSQL"
SelectedValue='<%# Bind("ProjectShipmentID") %>' DataValueField="ProjectShipmentID"
DataTextField="ShipmentNo" Enabled="False" />
</div>
...
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="FvChangeOrderSQL" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectLogicTestConnectionString %>"
SelectCommand="SELECT [ProjectID], [ProjectChangeOrderID], [ProjectShipmentID], [SeqNo],
[Date], [EnteredBy_UserID], [Source], [Initiator], [Reason], [ReasonNotes],
[ApprovalCode], [Description], [NumPanels], [Amount], [IsCommissionable], [DateDue],
[DateRecd], [Status]
FROM [tblProjectChangeOrder] WHERE ([ProjectChangeOrderID] = @PCOID)">
<SelectParameters>
<asp:QueryStringParameter Name="PCOID" QueryStringField="PCOID" Type="Int32"/>
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="DdlShipmentSQL" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectLogicTestConnectionString %>"
SelectCommand="SELECT pco.ProjectShipmentID, ps.ShipmentNo FROM tblProjectChangeOrder pco
LEFT JOIN tblProjectShipment ps ON pco.ProjectShipmentID = ps.ProjectShipmentID
WHERE pco.ProjectID = @ProjectID">
<SelectParameters>
<asp:ControlParameter ControlID="FvChangeOrder$LblProjectID"
Name="ProjectID" PropertyName="Text"/>
</SelectParameters>
</asp:SqlDataSource>
我是否最好省略DDL SQLDatasource上的WHERE和ControlParameter,并在FormView的OnDataBound方法的代码隐藏中更改DDL的SQL源?
我想我解决了。我将 ControlParameter 更改为 Parameter Type="String",并在Form_Load将标签设置为 FvChangeOrder.FindControl("LblProjectID"(,将 LblProject.Text 分配给一个字符串,然后将其作为 Select Parameter 的默认值传递。
在一个半相关的问题上,我不得不删除标记端的 SelectedValue,并在 DDL SelectedValue 的Form_Load中处理 SQLCommand。可能是一个糟糕的数据集,但我不断收到一个错误,即字段中的值不在列表中或类似的东西中。给定项目有多个变更通知单,其装运 ID 的值为 NULL。
无论如何,所有人都在ItemTemplate方面工作。现在看看我是否可以在 EditItemTemplate 上保持一切正常。:P