FormView EditTemplate如何更新ObjectDataSource UpdateParameters中的值?

时间:2009-04-19 00:43:26

标签: c# asp.net objectdatasource formview

我有一个绑定到ObjectDataSource的FormView。

* ObjectDataSource定义(为简单起见,省略了部分内容)*

<asp:ObjectDataSource 
    ID="odsHousehold" 
    runat="server"
    TypeName="BLL.Households"
    ConflictDetection="OverwriteChanges"
    UpdateMethod="UpdateHousehold" 
    >
    <UpdateParameters>
        <asp:Parameter Name="sName" Type="String" Direction="Input" />
        <asp:Parameter Name="sAddress" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sCity" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sState" Type="String" Direction="Input" DefaultValue="" />
        <asp:Parameter Name="sZip" Type="String" Direction="Input" DefaultValue="" />
    </UpdateParameters>
</asp:ObjectDataSource>

* FormView定义(为简单起见,省略了部分内容)*

   <asp:FormView 
    ID="fvHousehold"
    runat="server"
    DataKeyNames="HouseholdID"
    DataSourceID="odsHousehold"
    HorizontalAlign = "Left"
 >
<EditItemTemplate>
<asp:TextBox ID="txtHouseHoldName" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("HouseholdName") %>'></asp:TextBox>
<asp:TextBox ID="txtAddress" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("Address") %>'></asp:TextBox>
<asp:TextBox ID="txtCity" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("City") %>'></asp:TextBox>
<asp:TextBox ID="txtState" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("State") %>'></asp:TextBox>
<asp:TextBox ID="txtZip" runat="server" MaxLength="50" Width="100%" Text='<%# Bind("Zip") %>'></asp:TextBox>
 <asp:Button ID="btnUpdateHousehold" runat="server" Text="Update" CommandName="Update" />
</EditItemTemplate>
</asp:FormView>

我想知道:当单击“更新”按钮时,FormView如何知道哪个UpdateParameter用哪个EditTemplate TextBox填充?
例如,我没有指示“txtAddress” “在FormView中填充UpdateParameter”sAddress“但是InputParameters [”sAddress“]包含txtAddress的Text值。怎么知道这样做?

任何一位大师都可以启发我吗?

非常感谢你,

库伦

3 个答案:

答案 0 :(得分:2)

“当单击”更新“按钮时,FormView如何知道使用哪个EditTemplate TextBox填充哪个UpdateParame?”

我相信简单的答案是:它知道因为你放在TextBox控件中的Bind语句。例如。 txtAddress具有“Bind(”Address“)”所以当调用更新时,它在txtAddress和参数“Address”之间有一个连接

答案 1 :(得分:1)

也许只是将TextBox控件添加到EditItemTemplate的顺序?即控件的顺序必须与UpdateParameters的顺序相匹配......

尝试交换txtHouseHoldName和txtAddress的位置,地址是否会传递到更新方法的sName参数?

答案 2 :(得分:1)

我在博客上发布了一篇文章,详细讨论了Bind()在http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx 的工作原理。