• ListView控件的Insert、Edit和Delete功能(第二部分)


    本系列文章将通过一个简单的实例,结合我自己使用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 = -1;
        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

  • 相关阅读:
    为什么Java的main方法必须是public static void?
    2. 直接插入、折半插入、希尔排序及其比较(插入类排序)
    1. 冒泡与选择排序及其比较
    0.排序介绍与性能度量
    (十)更快的排序算法(归并、快排、基数)
    (九)排序(选择、插入、希尔)
    (八)递归
    (七)栈的三种实现
    (六)栈的规则及应用
    (五)如何写测试类
  • 原文地址:https://www.cnblogs.com/qiushuixizhao/p/4632457.html
Copyright © 2020-2023  润新知