编辑ListView(Edit,Update,Inse

一、编辑,取消,更新操作

首先拖一个ListView控件到页面,然后按如下代码进行调整,这里为了利用ListView控件中按钮的内置功能CommandName必须和我们这里的名字一样

前端代码

<asp:ListView ID="ListView1" runat="server" OnItemEditing="ListView1_ItemEditing"

OnItemCanceling="ListView1_ItemCanceling" OnItemUpdating="ListView1_ItemUpdating">

<ItemTemplate>

<tr>

<td>

<%#Eval("ID") %>

</td>

<td>

<%#Eval("name") %>

</td>

<td>

<asp:Button ID="EditButton" runat="server" Text="Edit" CommandName="Edit" />

</td>

</tr>

</ItemTemplate>

<EditItemTemplate>

<tr>

<td>

<asp:Label ID="IDLable" runat="server" Text='<%#Eval("ID") %>' />

</td>

<td>

<asp:TextBox ID="NameTextBox" runat="server" Text='<%#Bind("Name") %>' />

</td>

<td>

<asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="Update" />

<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" />

</td>

</tr>

</EditItemTemplate>

<LayoutTemplate>

<table>

<tr runat="server" id="itemPlaceholder">

</tr>

</table>

</LayoutTemplate>

</asp:ListView>

这里我们在App_Code文件夹中添加DataAccess类来模拟数据提供,代码如下:

模拟数据提供代码

public class DataAccess

{

public List<Employee> List;

public DataAccess()

{

List = new List<Employee>();

Employee e1 = new Employee {ID=1, Name = "lfm1", Age = 30 };

Employee e2 = new Employee {ID=2, Name = "lfm2", Age = 30 };

Employee e3 = new Employee {ID=3, Name = "lfm3", Age = 30 };

Employee e4 = new Employee {ID=4, Name = "lfm4", Age = 30 };

Employee e5 = new Employee {ID=5, Name = "lfm5", Age = 30 };

Employee e6 = new Employee {ID=6, Name = "lfm6", Age = 30 };

List.Add(e1);

List.Add(e2);

List.Add(e3);

List.Add(e4);

List.Add(e5);

List.Add(e6);

}

}

public class Employee

{

public int ID { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public int Sex { get; set; }

}

页面的后台代码如下:

页面后台代码

public partial class _Default : System.Web.UI.Page

{

DataAccess da = new DataAccess();

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

Bind();

}

}

private void Bind()

{

ListView1.DataSource = da.List;

ListView1.DataBind();

}

protected void ListView1_ItemEditing(object sender, ListViewEditEventArgs e)

{

ListView1.EditIndex = e.NewEditIndex;

Bind();

}

protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e)

{

foreach (var item in da.List)

{

if (item.ID.ToString() == ((Label)ListView1.Items[e.ItemIndex].FindControl("IDLable")).Text)

{

item.Name = ((TextBox)ListView1.Items[e.ItemIndex].FindControl("NameTextBox")).Text;

}

}

ListView1.EditIndex = -1;

Bind();

}

protected void ListView1_ItemCanceling(object sender, ListViewCancelEventArgs e)

{

ListView1.EditIndex = -1;

Bind();

}

}

这里需要注意在Page_Load中绑定时必须判断是否是回发,如果是回发状态则不能重新绑定,因为如果重新绑定则相应的事件不会被触发

二、删除操作

前端代码

前端代码

<asp:ListView ID="ListView1" runat="server" OnItemDeleting="ListView1_ItemDeleting">

<ItemTemplate>

<tr>

<td>

<asp:Label ID="IDLable" runat="server" Text='<%#Eval("ID") %>' />

</td>

<td>

<%#Eval("name") %>

</td>

<td>

<asp:Button ID="EditButton" runat="server" Text="Edit" CommandName="Edit" />

</td>

<td>

<asp:Button ID="DeleteButton" runat="server" Text="Delete" CommandName="Delete" />

</td>

</tr>

</ItemTemplate>

<LayoutTemplate>

<table>

<tr runat="server" id="itemPlaceholder">

</tr>

</table>

</LayoutTemplate>

</asp:ListView>

 

因为这里是模拟数据提供,所以数据的状态我们暂且用Session保存,后台代码如下:

后台代码

public partial class _Default : System.Web.UI.Page

{

DataAccess da;

protected void Page_Load(object sender, EventArgs e)

{

if (Session["da"] == null)

{

da = new DataAccess();

Session["da"] = da;

}

else

{

da = Session["da"] as DataAccess;

}

if (!IsPostBack)

{

Bind();

}

}

protected void ListView1_ItemDeleting(object sender, ListViewDeleteEventArgs e)

{

foreach (var item in da.List)

{

string currentID = ((Label)ListView1.Items[e.ItemIndex].FindControl("IDLable")).Text;

if (item.ID.ToString() == currentID)

{

da.List.Remove(item);

break;

}

}

Bind();

}

}

三、插入操作

ListView的Insert Mode通过其属性InsertItemPosition来控制,该属性的取值有三种:

None:非Insert状态

FirstItem:Insert状态,且编辑模板显示于ListView所有item的最前面

LastItem :Insert状态,且编辑模板显示于ListView所有item的最后面

前端代码:

<asp:ListView ID="ListView1" runat="server" OnItemInserting="ListView1_ItemInserting">

<LayoutTemplate>

<table id="Table1" runat="server" border="0" style="">

<tr runat="server" id="itemPlaceholder" />

</table>

</LayoutTemplate>

<ItemTemplate>

<tr>

<td>

<%#Eval("ID") %>

</td>

<td>

<asp:Label ID="idLabel" runat="server" Text='<%# Eval("name") %>' />

</td>

<td>

<asp:Label ID="xLabel" runat="server" Text='<%# Eval("age") %>' />

</td>

</tr>

</ItemTemplate>

<InsertItemTemplate>

<tr style="">

<td>

<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="插入" />

<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="清除" />

</td>

<td>

<asp:TextBox ID="IDTextBox" runat="server" />

</td>

<td>

<asp:TextBox ID="NameTextBox" runat="server" />

</td>

<td>

<asp:TextBox ID="AgeTextBox" runat="server" />

</td>

</tr>

</InsertItemTemplate>

</asp:ListView>

<asp:Button ID="Button1" runat="server" Text="插入" OnClick="Button1_Click" />

原文出处:吾吾织梦WwW.55ZM.CoM

原文地址:https://www.cnblogs.com/feb9903/p/3682011.html