2010-08-20 45 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