"Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a datab



很确定我知道为什么会出现错误,只是不确定如何修复它。在 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

相关内容

最新更新