2013-02-04 28 views
0

我有一個數據中繼器綁定到頁面上的ObjectDataSource。我有選擇的工作,但我有更新的問題。當我調用Save按鈕時,我想要調用UpdateMethod中指定的函數,並將其傳遞給中繼器已更改對象的參數。問題是我無法弄清楚如何讓對象退出中繼器。我不想將每個單獨的字段指定爲更新參數,因爲這實際上很笨重,並且破壞了數據綁定的目的。任何對此的幫助都會很大。使用ObjectDataSource和Repeater時獲取更新對象

<%@ 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 

回答

0

我不知道我完全遵循什麼是怎麼回事,我沒有足夠的信譽要問在評論。你的保存按鈕在哪裏?我猜這是在中繼器之外。您是否試圖挽救出現在您的轉發器中的所有公司,或者是否只有一家公司?你想從中繼器回來什麼?只是在文本框中的公司名稱?更多的細節可能會提供您正在尋找的幫助。

此外,將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 

你可以看到here對於如何使用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 

但我認爲一箇中繼器對於你在這裏要做的事是沒有必要的。中繼器通常用於顯示項目的集合。如果您的目標是簡單地顯示一家公司,您是否可以在您的代碼背後設置TextBox控件的Text屬性?

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 
+0

我的保存按鈕不在中繼器中。轉發器中只有一家公司出現。我想從中繼器獲得的是一個包含所有修改字段的對象。我會嘗試添加OnUpdating事件並讓你知道。 – bechbd

+0

看看我的更新,並讓我知道如果這回答你的問題。 – Irving

+0

我正在使用數據中繼器,以便我可以在兩個方向上將數據綁定到對象數據源。我的目標是刪除所有左/右代碼(textbox1.text = value/value = textbox1.text) – bechbd

1

你不能做到這一點與Repeater控件:它不保留對象的副本,它已綁定。它不會執行雙向綁定。

但是其他控件呢。請查看FormView,GridViewDetailsView。有關該主題的完整處理,請參閱here

0

對於您所遵循的方法,這是不可能的。

我們可以肯定地開發一個自定義Post Post來實現所需的輸出。

相關問題