0

我成功地使用了一个业务对象、一个存储过程和结构来填充一个带有文本框控件列表的页面,以显示并允许编辑一些客户详细信息数据。我分别将每个文本框控件分配给结构中的一个值。

然后,我成功地使用 SqlDataSource 填充表单视图以显示相同的客户详细信息数据。

我现在想使用总线对象、存储过程和结构(或其他对象)在表单视图中显示客户详细信息数据。

下面是我如何调用业务对象来获取数据并将其返回到 Customer Details 页面的 Load 事件中的结构:

 CustomerDetailsStruct cd = CustomerDetailsAccess.GetCustomerDetails(customerId);

如何告诉表单视图使用该结构?或者,我是否需要将数据检索到不同的对象中?

这是我最初使用 SqlDataSource 时显示客户详细信息数据的页面中的代码:

    <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" CellPadding="4" DataKeyNames="CustomerID" ForeColor="#333333">

我看到有一个 DataSource 属性可用。此 MSDN 页面上的示例使用 DataSet。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.formview.aspx 我还在 MSDN 上阅读了有关 ObjectDataSource 的信息。

如果我需要提供更多详细信息或更多代码,请告诉我。

我还想问一个更广泛的问题:有人可以推荐一本可以解释 DataSource 对象和 DataBound 控件以及如何将它们配对的好书或网站吗?我目前正在阅读一本书,其中有一些关于如何做一些事情的好例子。但是,有没有很好的数据绑定参考指南?


这是我的更多表单视图。

TheKingDave:我没有 DataSource 或 DataSourceID 属性,因为我不知道如何在 Page_Load 事件中使用结构或备用对象作为我的数据源,这是我的主要问题。我在 Page_Load 事件中得到了结构。我想我需要以某种方式使它成为这里的数据源:

                // Get the Customer Details data with the business object.
        CustomerDetailsStruct cd = CustomerDetailsAccess.GetCustomerDetails(customerId);

这是 EditItemTemplate 的开始。我从使用 SqlDataSource 的表单视图中的代码复制/粘贴了它,因此我不必重新创建表。它只是一个表格,在 EditItemTemplate 中具有文本框控件,在 ItemItemplate 中具有标签。

    <asp:FormView ID="FormView1" runat="server"  CellPadding="4"  ForeColor="#333333">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditItemTemplate>

    <table cellpadding="5" class="UserDetailsTable">       
   <tr>
        <td class="UserDetailsTitleCell">Address1:</td>
        <td><asp:TextBox ID="Address1TextBox" runat="server" Text='<%# Bind("Address1") %>'>
        </asp:TextBox></td>
   </tr> 

这是项目模板的开始:

        <ItemTemplate>
    <table cellpadding="5" class="UserDetailsTable">
<tr>
    <th colspan="2">Customer Details:</th> 
</tr> 
    <tr>
        <td class="UserDetailsTitleCell">Address1:</td>
    <td class="UserDetailsTitleCell"><asp:Label ID="Address1Label" runat="server" Text='<%# Bind("Address1") %>'></asp:Label></td> 
    </tr>

需要更多/其他东西?

4

1 回答 1

2

尝试这个:

CustomerDetailsStruct cd = CustomerDetailsAccess.GetCustomerDetails(customerId);

//FormView DataSource has to be IListSource, IEnumerable, or IDataSource
List<CustomerDetailsStruct> list = new List<CustomerDetailsStruct>();
list.Add(cd);
FormView.DataSource = list;

//Choose the proper mode (templates have to be defined) 
FormView.ChangeMode(FormViewMode.ReadOnly);
FormView.DataBind();
于 2013-01-25T17:42:41.777 回答