Repeater控件他给了我们编程人员完好的可编辑性,而且执行效率是微软三个数据控件最快的(相关资料可以参考这里) ,但是由于自身局限性(没有EditTemplate属性)还不能很好的实现类似于Gridview中的添加、修改、删除功能,但是是不是不能实现了呢,嘿嘿。
        要实现上面功能,首先有两个技术点要解决:
        1、当某行点击了编辑按钮,事件要回发而且需要知道数据行的ID,并且要执行什么操作;
        2、点击之后,需要改变行状态;

第一个可以通过linkbutton的CommandName和CommandArgument两个属性进行设置,代码如下

<tr>
    <td style="background-color: #FFF; height:25px; width:30%;">
        <%# DataBinder.Eval(Container.DataItem, "a")%>
    </td>
    <td style="background-color: #FFF;  width:30%;">
        <%# DataBinder.Eval(Container.DataItem,"b") %>
    </td>
    <td style="background-color: #FFF;  width:30%;">
        <%# DataBinder.Eval(Container.DataItem,"c") %>
    </td>
    <td style="background-color: #FFF; width:10%;">
        <asp:LinkButton runat="server" ID="lbtEdit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
            CommandName="Edit" Text="编辑"></asp:LinkButton>&nbsp;&nbsp;&nbsp;
        <asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
            CommandName="Delete" Text="删除"></asp:LinkButton>
    </td>
</tr>

然后在后台设置Repeater的OnItemDataBound事件,通过

e.CommandName

可以确定是什么操作。

而关于第二点有有点二了,暂时没找到更好的解决方案。我是这样的,在ItemTemplate中加入两个Panel分别放正常和编辑状态显示的内容,如下

<ItemTemplate>
    <asp:Panel ID="plItem" runat="server">
        <tr>
            <td style="background-color: #FFF; height: 25px; width: 30%;">
                <%# DataBinder.Eval(Container.DataItem, "a")%>
            </td>
            <td style="background-color: #FFF; width: 30%;">
                <%# DataBinder.Eval(Container.DataItem,"b") %>
            </td>
            <td style="background-color: #FFF; width: 30%;">
                <%# DataBinder.Eval(Container.DataItem,"c") %>
            </td>
            <td style="background-color: #FFF; width: 10%;">
                <asp:LinkButton runat="server" ID="lbtEdit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                    CommandName="Edit" Text="编辑"></asp:LinkButton>&nbsp;&nbsp;&nbsp;
                <asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                    CommandName="Delete" Text="删除"></asp:LinkButton>
            </td>
        </tr>
    </asp:Panel>
    <asp:Panel ID="plEdit" runat="server">
        <tr>
            <td style="background-color: #FFF; height: 25px; width: 30%;">
                <asp:TextBox ID="txtA" Text='<%# DataBinder.Eval(Container.DataItem,"a") %>' runat="server"></asp:TextBox>
            </td>
            <td style="background-color: #FFF; width: 30%;">
                <asp:TextBox ID="txtB" Text='<%# DataBinder.Eval(Container.DataItem,"b") %>' runat="server"></asp:TextBox>
            </td>
            <td style="background-color: #FFF; width: 30%;">
                <asp:TextBox ID="txtC" Text='<%# DataBinder.Eval(Container.DataItem,"c") %>' runat="server"></asp:TextBox>
            </td>
            <td style="background-color: #FFF; width: 80px; width: 10%;">
                <asp:LinkButton runat="server" ID="lbtUpdate" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                    CommandName="Update" Text="更新"></asp:LinkButton>&nbsp;&nbsp;&nbsp;
                <asp:LinkButton runat="server" ID="lbtCancel" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                    CommandName="Cancel" Text="取消"></asp:LinkButton>
            </td>
        </tr>
    </asp:Panel>
</ItemTemplate>

这样有一个缺点,会在每行tr标签前后多出div标签,虽然这不影响显示(在IE和FF中测试过),但是这给页面造成了垃圾代码,希望那位知道其他解决方案告知下,我在这里就抛砖引玉了:)
        
        接着由后台判断,代码如下

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        if (m_dt.Rows[e.Item.ItemIndex]["ID"].ToString() != m_iID.ToString())
        {
            ((Panel)e.Item.FindControl("plItem")).Visible = true;
            ((Panel)e.Item.FindControl("plEdit")).Visible = false;
        }
        else
        {
            ((Panel)e.Item.FindControl("plItem")).Visible = false;
            ((Panel)e.Item.FindControl("plEdit")).Visible = true;
        }
    }
}

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "Edit")
    {
        m_iID = int.Parse(e.CommandArgument.ToString());
    }
    else if (e.CommandName == "Cancel")
    {
        m_iID = -1;
    }
    else if (e.CommandName == "Update")
    {
        //Update.

        string sA = ((TextBox)this.Repeater1.Items[e.Item.ItemIndex].FindControl("txtA")).Text.Trim();
        string sB = ((TextBox)this.Repeater1.Items[e.Item.ItemIndex].FindControl("txtB")).Text.Trim();
        string sC = ((TextBox)this.Repeater1.Items[e.Item.ItemIndex].FindControl("txtC")).Text.Trim();

        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('更新ID:" +
            e.CommandArgument + ";页面值:A," + sA + "----B," + sB + "----C," + sC + "');", true);
    }
    else if (e.CommandName == "Delete")
    {
        //Delete.            
        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('删除ID:" + e.CommandArgument + "');", true);
    }

    Repeater1.DataSource = this.InitDataTable();
    Repeater1.DataBind();
}

效果可以点这里进行浏览

代码点击这里

^o^

转载于:https://www.cnblogs.com/treeyh/archive/2008/01/10/1034080.html

使用Repeater实现类似GridView编辑功能相关推荐

  1. jsp中类似gridview的功能

    SELECT 单位,sum(收入) as 收入 from tb group by 单位 单位      收入 a单位     11111 b单位     22222 代码 <table> ...

  2. 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件

    知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...

  3. 数据绑定--Repeater, DataList, or GridView?

    前些天在CSDN上看到一个比较老的帖子,讨论的是.NET中数据绑定应用什么控件更好.在社区中我也看到有朋友问是否应该使用这些控件的问题.我来说说我的想法.希望对新手有帮助. 先来看看主要的几个数据绑定 ...

  4. 下拉式菜单在GridView编辑时联动选择

    父子下拉式菜单DropDownList在GridView编辑时联动选择. 本Demo从添加时的父子DropDownList联动选择,以及在GridView的编辑时联动功能实现. 文件格式:.wmv;大 ...

  5. flex中dataGrid的编辑功能

    在flex的dataGrid中,很多情况下列是需要嵌入其他的控制的,比如:checkbox,combox等,此时需要利用dataGrid的如下功能: 1.datagrid编辑功能简介     当我们点 ...

  6. Flex控件_datagrid_编辑功能

    1.datagrid编辑功能简介     当我们点击datagrid中的一个单元格进行编辑时,可结合使用一些组件,RadioButtonGroup.checkbox.ComboBox等     dat ...

  7. flex中dataGrid的编辑功能 精华

    from:http://blog.csdn.net/wuyan520/article/details/5469794 也是转载,源头未知. 在flex的dataGrid中,很多情况下列是需要嵌入其他的 ...

  8. 如何实现GridView分页功能?

    实现GridView分页功能的四个关键步骤 1.设置AllowPaging="True" 2.设置PageSize=每页纪录数. 3.设置分页事件OnPageIndexChangi ...

  9. C# .net GridView编辑行数据

    C# .net GridView编辑行数据 比较原始的编辑功能,只能在数据量小的时候用,数据一多体验就很不好,但还是记录一下吧. 原理就是用label和textbox两个控件绑定同一列数据,点编辑就显 ...

最新文章

  1. apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码
  2. WM_PAINT消息小结
  3. Apache Cassandra和Java入门(第二部分)
  4. 爬虫软件python彻底卸载_Python爬虫实践:如何优雅地删除豆瓣小组的帖子
  5. 《低功耗蓝牙开发权威指南》——第3章低功耗蓝牙的体系结构
  6. C语言——输出9*9口诀
  7. android安全string,[求助]Android Xposed 有没有可以将String转换成Method类型的方法
  8. iOS的view翻转动画实现--代码老,供参考
  9. 数据结构+算法+c++学习(写在前面)
  10. Atitit it软件领域职称评级规定,精深方向。 目录 1. 软件工程师资格证 1 1.1. 法规规范 十大标准,三级五晋制。 1 1.2. 三级制 使用者 原理维修者 制造设计者 1 1.3.
  11. java web 房屋租赁系统
  12. 目标管理 - SMART原则
  13. 用ILDasm.exe深入理解委托
  14. mitmproxy+python
  15. java traingdx函数实现_提取伪彩色图像的信息
  16. 电脑怎么压缩jpg图片?如何压缩照片并保持清晰?
  17. Unity Timeline自定义轨道
  18. 商务部:快捷支付限额影响网购便捷性 不利于促进消费
  19. linux 文件的列数,Linux 输出文件列数,拼接文件
  20. WordPress批量添加、修改、删除自定义字段的sql命令

热门文章

  1. 感受JTable 与 JTableModel
  2. mysql每秒57000_MySQL 性能:使用 MySQL 5.7 实现每秒 50 万查询
  3. MySQL 高级 - 触发器 - 查看及删除
  4. Tomcat和Jetty对WebSocket的支持
  5. 副本的leader选举
  6. BeanDefinition构建示例
  7. maven的java工程取mysql数据库数据
  8. OAuth2.0授权码认证流程介绍
  9. JDK7的六个新特性回顾和讲解
  10. 上传问题分析1--文件保存位置