0

ページ上のObjectDataSourceにバインドしているデータリピーターがあります。selectは機能していますが、アップデートに問題があります。[保存]ボタンを呼び出すときは、UpdateMethodで指定された関数を呼び出して、リピーターの変更されたオブジェクトのパラメーターに渡します。問題は、オブジェクトをリピーターから戻す方法がわからないことです。個々のフィールドを更新パラメーターとして指定したくないのは、それが本当に扱いにくく、データバインディングの目的を損なうからです。これに関するどんな助けも素晴らしいでしょう。

    <%@ Page Language="VB" %>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
<form id="form1" runat="server">
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1" ItemType="CompanyObject">
        <ItemTemplate>      
    <asp:Label ID="Label2" runat="server" CssClass="clsLabel">Company:</asp:Label>  
    <asp:TextBox ID="txtCompany" runat="server" Text='<%# BindItem.Company%>'></asp:TextBox>
        </ItemTemplate>
     </asp:Repeater>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        SelectMethod="GetData" TypeName="WebApplication1.CompanyObject"
        UpdateMethod="UpdateCompany" DataObjectTypeName="CompanyObject"></asp:ObjectDataSource>
    </form>
</body>
</html>

これが私が呼びたい背後にあるコードです:

Public Function UpdateCompany(ByVal company As tblCompany)
'Save the Value here except that company is always null
End Function

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    ObjectDataSource1.Update()
End Sub
4

3 に答える 3

1

リピーターコントロールではそれを行うことはできません。バインドされたオブジェクトのコピーを保持しません。双方向バインディングは行いません。

しかし、他のコントロールはそうします。FormViewGridView、およびDetailsViewを確認してください。主題の完全な治療については、ここを参照してください。

于 2013-02-10T03:15:49.307 に答える
0

ここで起こっていることを完全にフォローしているのかどうかはわかりません。また、コメントで質問するのに十分な評判がありません。保存ボタンはどこにありますか?リピーターの外だと思います。リピーターに表示されるすべての会社を保存しようとしていますか、それとも1つの会社しかありませんか?リピーターから何を取り戻そうとしていますか?テキストボックスにある会社名だけですか?さらにいくつかの詳細があなたが探している助けを提供するかもしれません。

OnUpdatingまた、にイベントを追加し、ObjectDataSourceそれをコードビハインドで処理すると役立つ場合があります。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetData" TypeName="WebApplication1.CompanyObject"
UpdateMethod="UpdateCompany" DataObjectTypeName="CompanyObject" 
OnUpdating="Company_Updating"></asp:ObjectDataSource>

そして、背後にあるコード:

Private Sub Company_Updating(ByVal s As Object, ByVal e As ObjectDataSourceMethodEventArgs)
    ' use e.InputParameters here to pass in the values you need
End Sub

使用方法の例については、こちらをご覧くださいInputParameters

アップデート

質問に答えるには、次を使用してリピーターのテキストボックスから値を取得できる必要があります。

Protected Sub Company_Updating(ByVal s As Object, ByVal e As ObjectDataSourceMethodEventArgs)
    If (Repeater1.Items.Count > 0) Then
        e.InputParameters.Add("CompanyName", CType(Repeater1.Items(0).FindControl("txtCompany"), TextBox).Text
    End If
End Sub

しかし、ここでやろうとしていることにはリピーターは不要だと思います。リピーターは通常、アイテムのコレクションを表示するために使用されます。単に1つの会社を表示することが目標である場合、コードビハインドでコントロールのTextプロパティを設定できませんか?TextBox

Protected Sub Page_Load(ByVal s As Object, ByVal e As EventArgs) Handles Me.Load
    If (Not Page.IsPostBack) Then
        txtCompany.Text = yourCompanyObject.Name
    End If
End Sub
于 2013-02-08T00:02:25.887 に答える
0

これは、あなたが従うアプローチでは不可能です。

確実にカスタムポストバックを開発して、目的の出力を実現できます。

于 2013-02-11T10:59:39.640 に答える