在没有EditMode的情况下在ListView中编辑

时间:2010-08-20 12:29:12

标签: asp.net 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中看到了数据。 我不知道如何在不进入EditMode的情况下编辑ListView中的数据 - 我没有编辑按钮,我只有文本框来输入新数据。 我想要的是将文本框中编辑的数据以相反的方向绑定到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?)

1 个答案:

答案 0 :(得分:0)

您在哪里调用代码的最后一部分?我想你有一个提交按钮,你是否在其Click EventHandler中调用该代码?

您必须覆盖您的数据。如果您在Page的Load事件中使用DataBind,请确保仅在页面未回发时才这样做。

protected void Page_Load(object sender, EventArgs e)
        {

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