0

ビジネス オブジェクト、ストアド プロシージャ、および構造体を使用して、テキスト ボックス コントロールのリストをページに入力し、顧客の詳細データを表示して編集できるようにすることに成功しました。各テキスト ボックス コントロールを構造体の値に個別に割り当てました。

次に、SqlDataSource を使用してフォーム ビューにデータを入力し、同じ顧客の詳細データを表示することに成功しました。

バス オブジェクト、ストアド プロシージャ、および構造体 (またはその他のオブジェクト) を使用して、顧客の詳細データをフォーム ビューに表示したいと考えています。

ビジネス オブジェクトを呼び出してデータを取得し、それを Customer Details ページの Load イベントで構造体に返す方法を次に示します。

 CustomerDetailsStruct cd = CustomerDetailsAccess.GetCustomerDetails(customerId);

フォーム ビューに構造体を使用するように指示するにはどうすればよいですか? または、データを別のオブジェクトに取得する必要がありますか?

最初に SqlDataSource を使用したときに Customer Details データを表示しているページのコードを次に示します。

    <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 コントロール、およびそれらを組み合わせる方法を説明できる優れた本または Web サイトを推奨できますか? 私は現在、いくつかのことを行う方法の良い例がいくつかある本を読んでいます。しかし、データバインディングに関する優れたリファレンスガイドはありますか?


これが私のフォームビューの詳細です。

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 に答える