使用Repeater实现类似GridView编辑功能
来源:互联网 发布:mac用虚拟机玩游戏 编辑:程序博客网 时间:2024/05/19 23:00
Repeater控件他给了我们编程人员完好的可编辑性,而且执行效率是微软三个数据控件最快的 ,但是由于自身局限性(没有EditTemplate属性)还不能很好的实现类似于Gridview中的添加、修改、删除功能,但是是不是不能实现了呢,嘿嘿。
要实现上面功能,首先有两个技术点要解决:
1、
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>
<asp:LinkButton runat="server" ID="lbtDelete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
CommandName="Delete" Text="删除"></asp:LinkButton>
</td>
</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>
然后在后台设置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>
<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>
<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中测试过),但是这给页面造成了垃圾代码,希望那位知道其他解决方案告知下,我在这里就抛砖引玉了:)
接着由后台判断,代码如下
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();
}
{
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();
}
- 使用Repeater实现类似GridView编辑功能
- Repeater实现GridView编辑修改模式
- Repeater实现GridView编辑修改模式
- Repeater实现GridView编辑修改模式
- 使用gridview实现编辑、更新、取消功能和删除功能
- Android 使用GridView来实现类似RadioButton的多行单选功能
- Android 使用GridView来实现类似RadioButton的多行单选功能
- 可编辑div的使用,实现类似textarea功能
- 使用GridView的模板列实现在线编辑的功能
- Repeater\DataList\GridView实现分页,数据编辑与删除
- GridView 实现类似图片'发布'功能
- GridView和Repeater自定义分页功能的实现
- GridView实现编辑,选择删除,分页功能
- gridView单行编辑功能的实现
- gridview 导出到excel,repeater类似
- Asp.net使用jQuery实现Gridview, Repeater异步绑定数据
- gridview,datalist,repeater控件使用
- Gridview实现编辑,删除,和更新等功能
- 一步一步教你搭建win7下的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
- 详解C中volatile关键字
- Sencha Touch 快速入门2.0 第一章 开发Sencha Touch App
- 蒸煮米饭的窍门
- 网页调用迅雷的JS(支持客户端版和网页版)
- 使用Repeater实现类似GridView编辑功能
- ExtJS4中在grid panel的每一行显示qtip
- C#利用OWC组件生成数据报表
- 我眼中浏览器的助手——AJAX
- 各位,我尋求一些,有共同愛好,如對oracle,sql 等資料庫感興趣的,一起來交流,最好是網管或者是資料庫工程師
- Sencha Touch 快速入门2.0 第二章 Chorme浏览器调试功能介绍
- 嵌入式web服务器预研报告(转)
- ASP.NET中JSON的序列化和反序列化
- CSS样式的4种使用方式