本系列文章将通过一个简单的实例,结合我自己使用ListView的情况,展示如何用ASP.NET 3.5 ListView控件进行基本的Insert、Edit和Delete操作。

系统要求:

  • Windows XP SP2 or higher
  • VS2008 Beta 2 or Visual Web Developer 2008 Express Edition Beta 2

在本系列的第一篇中,介绍了如何实现ListView的Insert功能。本篇介绍如何实现Edit功能。

实现Edit功能

在ListView中加入Edit功能与Insert的方式非常相似。我们需要添加一个EditItemTemplate,在里边放置两个TextBox用于接收Name和Value的用户输入,以及一个Save按钮。这个Save按钮的CommandName设置为Update:

<EditItemTemplate>
    <li>Name: <asp:TextBox runat="server" ID="Name" Text='<%# Bind("Name") %>' />
     Value: <asp:TextBox runat="server" ID="Value" Text='<%# Bind("Value") %>' /> <br />     <asp:Button runat="server" ID="Update" Text="Save" CommandName="Update" />
     </li>
</EditItemTemplate>

同时,为ItemTemplate加上一个Edit按钮,其CommandName设置为Edit:

<ItemTemplate>
    <li><%# Eval("Name") %>(#<%# Eval("Value") %>)<br />    <asp:Button runat="server" ID="Edit" CommandName="Edit" Text="Edit" />
    </li><br />
</ItemTemplate>

然后为ListView添加ItemUpdating事件的处理方法。在这个方法里,我们如果得到当前修改的数据对象?我用到过的方法有三个:

  • 为Save按钮添加CommandArgument属性,其值设为当前数据对象的Value值;不过,在ItemUpdating里并不能直接取得CommandArgument值,所以这种方法的处理代码,应该挪至ItemCommand事件的处理方法中;
  • 在EditItemTemplate中放置一个Literal,其Text属性设置为数据对象的Value值,并将该Literal隐藏。在ItemUpdating中,对当前Item使用FindControl方法取得该Literal,进而取得Value值;
  • 使用ListView的DataKeyNames属性;

我们将使用第3种方法。为ListView添加DataKeyNames属性,并将其值设为Value。这样,在ListView被数据填充时,ListView的DataKeys属性会被自动填充上每个数据对象的Value值。

在ItemUpdating处理方法中,我们以事件参数ListViewUpdateEventArgs的ItemIndex值为下标,从ListView的DataKeys中取得当前编辑的数据对象的Value值,然后进行保存操作,最后,将ListView的EditIndex设为-1以退出Edit状态:

protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
    int value = int.Parse(ListView1.DataKeys[e.ItemIndex].Value.ToString());
    List<DataEntry> data = Data;
    DataEntry entry = data.Single(d => d.Value == value);
    entry.Name = (ListView1.Items[e.ItemIndex].FindControl("Name") as TextBox).Text;
    entry.Value = int.Parse((ListView1.Items[e.ItemIndex].FindControl("Value") as TextBox).Text);
    Data = data;
    ListView1.EditIndex = -;
    BindData();
}

事俱备,为ListView的ItemEditing事件添加处理方法,并在其中设置ListView的EditIndex属性以进入Edit状态,EditIndex值可以从事件参数ListViewEditEventArgs的NewEditIndex中获得:

protected void ListView1_ItemEditing(object sender, ListViewEditEventArgs e)
{
    ListView1.EditIndex = e.NewEditIndex;
    BindData();
}

运行示例网站,测试Edit功能,貌似正常。贴图就略了:)) 注:我们假定数据对象的Value值是唯一(相当于主健)的,为了不引入过多的细节,添加、修改数据时不作对该值的唯一性检查。

@ashchan

ListView控件的Insert、Edit和Delete功能(第二部分)的更多相关文章

  1. C# winform项目中ListView控件使用CheckBoxes属性实现单选功能

    C# winform项目中ListView控件使用CheckBoxes属性实现单选功能 在做项目时需要使用ListView控件的CheckBoxes属性显示,还要在点击行时自动选中CheckBoxes ...

  2. ListView控件的Insert、Edit和Delete功能(第一部分)

    摘自:http://blog.ashchan.com/archive/2007/08/28/listview-control-insert-edit-amp-delete-part-1aspx/ Li ...

  3. ListView控件的Insert、Edit和Delete功能第三部分(自我总结)

    1.刚开始在第一部分显示数据的时候出现如下错误: 修改: @Page 中的EnableEventValidation="false" 2.点击各个按钮没有反应. 修改:为page_ ...

  4. 《ASP.NET1200例》ListView 控件与DataPager控件的结合&lt;一&gt;

    分页     在前一部分开始时介绍的原 HTML 设计中内含分页和排序,所以根据规范完整实现该网格的任务尚未完成.我们先分页,然后再排序. ListView 控件中的分页通过引入另一个新控件 Data ...

  5. 《ASP.NET1200例》ListView控件之修改,删除与添加

    aspx <body> <form id="form1" runat="server"> <div> <asp:Lis ...

  6. 《ASP.NET1200例》ListView 控件与DataPager控件的结合&lt;二&gt;

    ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示 为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己 ...

  7. ListView控件--2016年12月9日

    ListView属性 ListView   名称 说明 AccessKey 重写 WebControl.AccessKey 属性. 不支持将此属性设置 ListView 控件.(覆盖 WebContr ...

  8. ListView控件

      打气筒工具:将R.layout.item_listview布局添加到相应的view控件里面 View view=LayoutInflater.from(ScondPro.this).inflate ...

  9. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

随机推荐

  1. UItableview 添加 uisearchController

    @property (nonatomic, strong) UISearchController* searchController; self.searchController = [[UISear ...

  2. 【转】Eclipse快捷键 10个最有用的快捷键

    转载地址:http://www.open-open.com/bbs/view/1320934157953 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但 ...

  3. C#,JS获取mac地址

    js: function MacInfo() { var locator = new ActiveXObject("WbemScripting.SWbemLocator"); va ...

  4. Java 停止一个 Thread

    boolean   flag=true;         public   void   run(){             while(flag){                     ... ...

  5. TypeWonder – 在任何网站上实时预览字体效果

    TypeWonder 让网页字体的选择过程变得轻松愉快.它可以帮助您在任何网站上快速测试 Web 字体效果!输入网站网址,就能够即时预览的字体的实际效果,还可以从数百种字体中进行挑选,您还可以得到所需 ...

  6. ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

    原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用 在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字 // ...

  7. uafxcwd.lib(afxmem.obj) : error LNK2005 解决方法

    项目为非MFC,但要用到MFC的库,使用过程中遇到的问题总结一下 uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl opera ...

  8. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 几道简单题的题解

    A. Toda 2 题意:给你n个人,每个人的分数是a[i],每次可以从两个人到五个人的使得分数减一,使得最终的分数相等: 思路:假设答案为m:每个人的分数与答案m的差值为d[i],sum为d[i]的 ...

  9. Android 布局简要范例

    Android的布局决定着实际的UI界面呈现情况,正是这些UI界面的组合与千变万化,才呈现出了各式各样的风格. 而这些基础的布局框架结构很重要,需要玩的很熟悉.我将以前参考的部分代码示例,所做的相关实 ...

  10. SQL server自定义函数实例

    create function dbo.t_bh (@str varchar(20)) returns varchar(20) as begin declare @bh varchar(20),@le ...