2010-08-20 78 views
0

我有一個類編輯ListView中沒有編輯模式上

public class MyClass 
{ 
public int id {get; set;} 
public string name {get; set;} 
} 

我存儲在列表MyClass類型的對象:

List<MyClass> listOfObjects {get; set;} 

我想用戶編輯數據。要顯示數據,我正在使用ListView控件 - 我綁定listOfObject列表ListView:

<asp:ListView runat="server" ID="ListView1"> 
<LayoutTemplate>  
<table runat="server" id="table1" >  
<tr runat="server" id="itemPlaceholder" > 
</tr>  
</table> 
</LayoutTemplate> 
<ItemTemplate>  
<tr id="tr" runat="server">   
<td id="td1" runat="server">    
<asp:TextBox ID="tb1" runat="server" Text='<%#Eval("id") %>' />   
</td>   
<td id="td2" runat="server">    
<asp:TextBox ID="tb2" runat="server" Text='<%#Eval("name")%>' />   
</td>  
</tr> 
</ItemTemplate> 
</asp:ListView> 

到目前爲止好,一切工作正常。我在ListView中看到數據。 我不知道如何在ListView中編輯數據而無需輸入EditMode - 我沒有Edit按鈕,我只有文本框才能輸入新數據。 我只想將相反方向的文本框中編輯的數據綁定到listOfObject列表中。我已經嘗試了許多解決方案 並沒有什麼正確的工作...

我以爲我可以讀取的數據是這樣的:

var listItems = ListView1.Items.Cast<ListViewDataItem>().Select(a => new MyClass 
      { 
       id = ((TextBox)a.FindControl("tb1")).Text, 
       name = ((TextBox)a.FindControl("tb2")).Text 
      }).ToList<>(); 

但這個我得到它是在文本編輯之前的數據...

請幫助我,因爲我不知道如何使它工作 (也許這將是更好地使用ObjectDataSource控件?)

回答

0

Wher你打電話給你的代碼的最後一部分?我想你有一個提交按鈕,你是否在Click EventHandler中調用該代碼?

您必須覆蓋您的數據。如果您在頁面加載事件中的DataBind確保只在頁面未回傳時才這樣做。

protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!Page.IsPostBack) 
      { 
       // databind 
      }  
     } 
+0

是的,我在執行該按鈕的Click事件的代碼的最後一部分 – pit 2010-08-20 13:20:37

+0

再次閱讀我的回答,我加了一些信息 – Jeroen 2010-08-20 13:27:09