自定义控件(15)给ListView添加编辑功能
来源:互联网 发布:java enum引用对象 编辑:程序博客网 时间:2024/06/06 15:37
上一遍文章定义的ListView支持单向绑定功能,也就是把数据库的数据显示到网页上。
接下来我们给ListView定义修改数据库数据的功能。这篇我们先定义编辑功能。
先看看效果
点击编辑转换到编辑模板
控件代码(红色为新加的代码,黄色为修改的代码)
using System;using System.Collections;using System.Collections.Generic;using System.Collections.Specialized;using System.ComponentModel;using System.Linq;using System.Text;using System.Web.UI;using System.Web.UI.WebControls;using System.Windows.Forms;namespace PZY.BLL.Web.SimpleListView{ public class SimpleListView : CompositeDataBoundControl { protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.Ul; } } /// <summary> /// 编辑列的index /// </summary> int _editIndex = -1; [Category("Default"), DefaultValue(-1)] public int EditIndex { get { return _editIndex; } set { _editIndex = value; } } private ITemplate _itemTemplate; [TemplateContainer(typeof(ListViewItem))] [PersistenceMode(PersistenceMode.InnerProperty)] [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public ITemplate ItemTemplate { get { return _itemTemplate; } set { _itemTemplate = value; } } //编辑模板 private ITemplate _editTemplate; [TemplateContainer(typeof(ListViewItem), BindingDirection.TwoWay)] [PersistenceMode(PersistenceMode.InnerProperty)] [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public ITemplate EditTemplate { get { return _editTemplate; } set { _editTemplate = value; } } //编辑事件 #region event private static readonly object EventEditCommand = new object(); [Category("Action")] public event EventHandler<ListViewArgument> EditCommand { add { base.Events.AddHandler(EventEditCommand, value); } remove { base.Events.RemoveHandler(EventEditCommand, value); } } protected virtual void OnEditCommand(ListViewArgument e) { EventHandler<ListViewArgument> handler = (EventHandler<ListViewArgument>)base.Events[EventEditCommand]; if (handler != null) { handler(this, e); } } #endregion #region Handle events /// <summary> /// 控件冒泡事件 /// 在模板列中点击的事件会冒泡到这里 /// </summary> /// <param name="source"></param> /// <param name="args"></param> /// <returns></returns> protected override bool OnBubbleEvent(object source, EventArgs args) { bool handled = false; if (args is CommandEventArgs) { CommandEventArgs cmdArgs = args as CommandEventArgs; if (cmdArgs.CommandName.Equals("Edit", StringComparison.OrdinalIgnoreCase)) { ListViewArgument e = new ListViewArgument((ListViewItem)source); HandleEdit(e); handled = true; } } return handled; } /// <summary> /// 编辑事件 /// </summary> /// <param name="e"></param> void HandleEdit(ListViewArgument e) { //if (GetData().CanUpdate) //{ EditIndex = e.Item.DataItemIndex; RequiresDataBinding = true; OnEditCommand(e); //} //else //{ // throw new InvalidOperationException("数据源不支持更新"); //} } #endregion protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding) { int index = 0; Controls.Clear(); if (ItemTemplate != null) { //数据库中每行数据 foreach (object dataItem in dataSource) { ListViewItem listViewItem = new ListViewItem(dataItem, index, index); if (index == EditIndex) { if (_editTemplate != null) { _editTemplate.InstantiateIn(listViewItem); } } else { _itemTemplate.InstantiateIn(listViewItem); } Controls.Add(listViewItem); index++; } //绑定 DataBind(false); ChildControlsCreated = true; } return index; } } /// <summary> /// 定义模板 /// </summary> [ToolboxItem(false)] public class ListViewItem : WebControl, IDataItemContainer { private object _dataItem; private int _index; private int _displayIndex; #region IDataItemContainer 成员 public object DataItem { get { return _dataItem; } } public int DataItemIndex { get { return _index; } } public int DisplayIndex { get { return _displayIndex; } } #endregion protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.Li; } } public ListViewItem() { } public ListViewItem(object dataItem, int index, int displayIndex) { this._dataItem = dataItem; this._index = index; this._displayIndex = displayIndex; } /// <summary> /// 冒泡事件(会冒泡到SimpleListView的OnBubbleEvent事件) /// </summary> /// <param name="source"></param> /// <param name="args"></param> /// <returns></returns> protected override bool OnBubbleEvent(object source, EventArgs args) { if (source is System.Web.UI.WebControls.IButtonControl) { CommandEventArgs cmdArgs = args as CommandEventArgs; if (cmdArgs != null) { CommandEventArgs cmdArg = new CommandEventArgs(cmdArgs.CommandName, this.DataItemIndex.ToString()); RaiseBubbleEvent(this, cmdArg); return true; } } return false; } } /// <summary> /// 定义事件参数 /// </summary> public class ListViewArgument : EventArgs { private ListViewItem _item; public ListViewItem Item { get { return _item; } set { _item = value; } } public ListViewArgument() { } public ListViewArgument(ListViewItem item) { _item = item; } }}
html代码
<div> <cc1:SimpleListView ID="SimpleListView1" DataSourceID="sdsProducts" runat="server"> <ItemTemplate> <div> ISDN: <asp:Label ID="ISDNLabel" runat="server" Text='<%# Eval("id") %>'></asp:Label> Title: <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label> Author: <asp:Label ID="AuthorLabel" runat="server" Text='<%# Eval("sort") %>'></asp:Label> <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="False" CommandName="Edit" Text="编辑" /> </div> </ItemTemplate> <EditTemplate> ProductID: <asp:Label ID="ProductIDLabel1" runat="server" Text='<%# Eval("Id") %>'></asp:Label> ProductName: <asp:TextBox ID="ProductNameTextBox" runat="server" Text='<%# Bind("Name") %>'> </asp:TextBox> UnitPrice: <asp:TextBox ID="UnitPriceTextBox" runat="server" Text='<%# Bind("sort") %>'> </asp:TextBox> </EditTemplate> </cc1:SimpleListView> <asp:SqlDataSource ID="sdsProducts" runat="server" ConnectionString="<%$ ConnectionStrings:myConn %>" OldValuesParameterFormatString="original_{0}" SelectCommand="select Id,Name,Sort from ArticleType"> <UpdateParameters> <asp:Parameter Name="Id" /> <asp:Parameter Name="Name" /> <asp:Parameter Name="Sort" /> </UpdateParameters> </asp:SqlDataSource> </div>
阅读全文
0 0
- 自定义控件(15)给ListView添加编辑功能
- 为 ListView 控件增加动态编辑功能
- 给VS2005的ListView添加排序功能
- CTreeCtrl控件中添加编辑框功能
- Android给自定义控件添加自定义属性
- 如何给自定义控件添加自定义属性
- 自定义listView添加滑动删除功能(代码)
- 给任何控件添加链接功能(原创)
- C#如何给自定义控件添加说明(解释)
- 向 ListView 控件添加搜索功能
- C# 向 ListView 控件添加搜索功能
- 给您的文字编辑程序添加一剂“后悔药”-使用RichTextBox控件提供用户编辑功能,加入类似word的“撤销”和“恢复”功能
- ListView 控件 添加多列 自定义列
- ListView添加头布局的自定义控件
- 如何给自定义控件添加事件
- 给用户自定义控件添加属性
- Delphi 给自定义控件添加属性页
- c# winform 给自定义控件添加事件
- 进程通讯fifo
- 数论:整数的唯一分解定理及其应用小结
- 52数学能力测评难题解析
- 深入研究Servlet线程安全性问题
- Spring mvc HTTP协议之缓存机制
- 自定义控件(15)给ListView添加编辑功能
- React Native 教程——集成到现有原生应用
- Matlab 定义函数,函数参数个数可变
- c++学习:多态(二)纯虚函数
- JVM读书笔记之JVM内存管理
- cocos2d-x学习-环境入门
- Fiddler抓取APP网络请求
- 【LeetCode】C# 103、Binary Tree Zigzag Level Order Traversal
- 【转】IO模型及select、poll、epoll和kqueue的区别