使用Repeater实现类似GridView编辑功能
要实现上面功能,首先有两个技术点要解决:
1、当某行点击了编辑按钮,事件要回发而且需要知道数据行的ID,并且要执行什么操作;
2、点击之后,需要改变行状态;
第一个可以通过linkbutton的CommandName和CommandArgument两个属性进行设置,代码如下
<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>
<asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Delete" Text="删除"></asp:LinkButton>
</td>
</tr>
然后在后台设置Repeater的OnItemDataBound事件,通过
可以确定是什么操作。
而关于第二点有有点二了,暂时没找到更好的解决方案。我是这样的,在ItemTemplate中加入两个Panel分别放正常和编辑状态显示的内容,如下
<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>
<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>
<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中测试过),但是这给页面造成了垃圾代码,希望那位知道其他解决方案告知下,我在这里就抛砖引玉了:)
接着由后台判断,代码如下
{
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编辑功能相关推荐
- jsp中类似gridview的功能
SELECT 单位,sum(收入) as 收入 from tb group by 单位 单位 收入 a单位 11111 b单位 22222 代码 <table> ...
- 【ASP.NET】第八课——GridView 控件的编辑功能优化,GridView控件中嵌套DropDownList控件
知识点:掌握 GridView 的编辑.高亮显示的功能 .GridView控件中嵌套DropDownList控件获取数据源. [ASP.NET]第七课--数据绑定和 GridView 控件的使用 重点 ...
- 数据绑定--Repeater, DataList, or GridView?
前些天在CSDN上看到一个比较老的帖子,讨论的是.NET中数据绑定应用什么控件更好.在社区中我也看到有朋友问是否应该使用这些控件的问题.我来说说我的想法.希望对新手有帮助. 先来看看主要的几个数据绑定 ...
- 下拉式菜单在GridView编辑时联动选择
父子下拉式菜单DropDownList在GridView编辑时联动选择. 本Demo从添加时的父子DropDownList联动选择,以及在GridView的编辑时联动功能实现. 文件格式:.wmv;大 ...
- flex中dataGrid的编辑功能
在flex的dataGrid中,很多情况下列是需要嵌入其他的控制的,比如:checkbox,combox等,此时需要利用dataGrid的如下功能: 1.datagrid编辑功能简介 当我们点 ...
- Flex控件_datagrid_编辑功能
1.datagrid编辑功能简介 当我们点击datagrid中的一个单元格进行编辑时,可结合使用一些组件,RadioButtonGroup.checkbox.ComboBox等 dat ...
- flex中dataGrid的编辑功能 精华
from:http://blog.csdn.net/wuyan520/article/details/5469794 也是转载,源头未知. 在flex的dataGrid中,很多情况下列是需要嵌入其他的 ...
- 如何实现GridView分页功能?
实现GridView分页功能的四个关键步骤 1.设置AllowPaging="True" 2.设置PageSize=每页纪录数. 3.设置分页事件OnPageIndexChangi ...
- C# .net GridView编辑行数据
C# .net GridView编辑行数据 比较原始的编辑功能,只能在数据量小的时候用,数据一多体验就很不好,但还是记录一下吧. 原理就是用label和textbox两个控件绑定同一列数据,点编辑就显 ...
最新文章
- apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码
- WM_PAINT消息小结
- Apache Cassandra和Java入门(第二部分)
- 爬虫软件python彻底卸载_Python爬虫实践:如何优雅地删除豆瓣小组的帖子
- 《低功耗蓝牙开发权威指南》——第3章低功耗蓝牙的体系结构
- C语言——输出9*9口诀
- android安全string,[求助]Android Xposed 有没有可以将String转换成Method类型的方法
- iOS的view翻转动画实现--代码老,供参考
- 数据结构+算法+c++学习(写在前面)
- Atitit it软件领域职称评级规定,精深方向。 目录 1. 软件工程师资格证	1 1.1. 法规规范 十大标准,三级五晋制。	1 1.2. 三级制 使用者 原理维修者 制造设计者	1 1.3.
- java web 房屋租赁系统
- 目标管理 - SMART原则
- 用ILDasm.exe深入理解委托
- mitmproxy+python
- java traingdx函数实现_提取伪彩色图像的信息
- 电脑怎么压缩jpg图片?如何压缩照片并保持清晰?
- Unity Timeline自定义轨道
- 商务部:快捷支付限额影响网购便捷性 不利于促进消费
- linux 文件的列数,Linux 输出文件列数,拼接文件
- WordPress批量添加、修改、删除自定义字段的sql命令