2013-01-23 100 views
1

我有以下DataList-保存所有在DataList控件按鈕更改,請單擊

<td> 
<asp:Label ID="Label3" runat="server" Text="Exclude"></asp:Label> 
<asp:DataList runat="server" ID="excludeTextBox"> 
<ItemTemplate> 

<br /> 
<asp:TextBox ID="myTextBox" runat="server" Text='<%# Container.DataItem.ToString() %>'></asp:TextBox>&nbsp; 


</ItemTemplate> 
</asp:DataList> 
<td> 
<asp:Label ID="Label4" runat="server" Text="Active"></asp:Label> 
<asp:DataList runat="server" ID="activeCheck" > 

<ItemTemplate> 

<br /> 
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Container.DataItem.ToString().Equals("1") %>' OnCheckedChanged="CheckBox1_CheckedChanged" AutoPostBack="true" /> 


</ItemTemplate> 
</asp:DataList> 

</td> 

因此,這產生了對每一個離開的數據庫行的文本框和複選框。

當前沒有與dataList關聯的保存操作,但是如果用戶選中或取消選中其中一個複選框,則會調用webservice並切換數據庫表中的值。

我的問題是,一個用戶編輯後的文本中的一些文本框,並選中或取消選中一些複選框,我怎麼能趕上一個save changes按鈕的變化。因爲如果項目是動態創建的,那麼技術上它們不存在於頁面上。我想在dataList上沒有任何行的保存選項的情況下執行此操作。

protected void saveChanges_Click(object sender, EventArgs e) 
{ 
    // capture all edits and call update webservice method. 
} 
+0

你嘗試過一個'谷歌search'看來你還沒有嘗試過自己任何的問候'codebehind' http://stackoverflow.com/questions/11976245/add-string-item-to-datalist-asp -net這裏開始閱讀 – MethodMan

+0

_這是不對的「因爲如果該項目已被動態創建,然後在技術上不存在於頁面上」的地方。像'DataList'這樣的webdatabound-control的'Template'中的每個控件都會在每次回發時創建並重新創建。它確實存在於頁面中。你可以通過'DataListItem.FindControl(Id)'來訪問它。 –

+0

你說的複選框被聯合國(UN)檢查時,在數據庫中已經更新了價值? –

回答

1

你基本上必須建立變更的表示。因爲沒有通用的解決方案,這一點,我沒有任何代碼,但這裏的過程是:

爲項目的變化,你必須存儲發生了什麼變化。您可以將實際更改的行的索引存儲在頁面上的隱藏變量中,或將更改存儲在JavaScript對象中。單擊保存更改時,客戶端會循環執行這些更改,如果存在,則批量發送或一次發送一個更改。

如果您對每個已更改的索引都有一個值爲0,2,5的隱藏字段,則可以輕鬆找到這些項目,從窗體中獲取值並將它們發送到Web服務。或者,你可以建立一個有類似變化的JavaScript對象:

{ key: 2, checked: true, text:"My new text" } 

這些儲存在一個數組中,並通過Web服務拉高到服務器。

+0

我想我明白你的解決方案將如何工作。所以,如果我標誌着當行已被改變,那麼在保存按鈕點擊,對於每一行已更改,請撥打新用戶輸入的Web服務更新的方法? – Ebikeneser

+0

是的,完全正確。 –

+0

右鍵我會設法實現此代碼,並確保我紀念這個,如果它的工作原理是正確的,感謝您的建設性的答案。 – Ebikeneser