mark新官上任,转贴一个DataGrid(增加删除确认和新增记录功能),道贺:)

datagrid

using System;
using System.Web.UI.WebControls;
using System.Data;

/*
*    The Control assumes the following:
*
*        1) It is bound to a DataView object.
*        2) The app will use direct SQL commands to update the source (NO batch update).
*        3) No custom paging is enabled.
*        
*      If you plan to support sorting, then some aspects of this code should be reviewed
*      and adapted.
*
*/

namespace BWSLib
{
    namespace Controls
    {
        public class EditableGrid : DataGrid
        {
            // Constructor that sets some styles and graphical properties    
            public EditableGrid()
            {
                AllowFullEditing = true;
                AddNewRow = false;
                RejectChanges = false;
                MustInsertRow = false;

                AllowPaging = true;

                // Handlers
                Init += new EventHandler(OnInit);
                PageIndexChanged += new DataGridPageChangedEventHandler(OnPageIndexChanged);

                ItemCreated += new DataGridItemEventHandler(OnItemCreated);
                CancelCommand += new DataGridCommandEventHandler(OnCancelCommand);
                EditCommand += new DataGridCommandEventHandler(OnEditCommand);
                UpdateCommand += new DataGridCommandEventHandler(OnUpdateCommand);
                DeleteCommand += new DataGridCommandEventHandler(OnDeleteCommand);
            }

            // PROPERTY: AllowFullEditing
            // Enable full editing
            public bool AllowFullEditing;

            // PROPERTY: AddNewRow
            // if true must add an empty row at the bottom of the data source
            public bool AddNewRow;
        
            // INTERNAL PROPERTY: RejectChanges
            // if true must reject changes on the last row of the data source
            protected bool RejectChanges;

            // INTERNAL PROPERTY: MustInsertRow
            // if true must INSERT instead of UPDATE and there's a pending change
            protected bool MustInsertRow
            {
                get {return Convert.ToBoolean(ViewState["MustInsertRow"]);}
                set {ViewState["MustInsertRow"] = value;}
            }

            // PROPERTY: DataSource (override)
            public override object DataSource
            {
                get {return base.DataSource;}
                set
                {    
                    base.DataSource = value;
                    if (AllowFullEditing)
                    {
                        if (AddNewRow)
                        {
                            AddNewRow = false;
                            InsertNewRow();
                        }

                        if (AllowFullEditing && RejectChanges)
                        {
                            RejectChanges = false;
                            MustInsertRow = false;
                            RejectChangesOnLastRow();
                        }
                    }
                }
            }

    
            // PROPERTY: command columns
            public bool ShowWebdings = false;
            public String EditColumnText = "Edit";
            public String EditColumnUpdateText = "OK";
            public String EditColumnCancelText = "Cancel";
            public String DeleteColumnText = "Delete";

            // EVENT: InitRow
            public delegate void DataGridInitRowEventHandler(Object sender, DataGridInitRowEventArgs e);
            public event DataGridInitRowEventHandler InitRow;
            private void OnInitRow(DataGridInitRowEventArgs e)
            {
                if (InitRow != null)
                    InitRow(this, e);
            }

            // EVENT: UpdateView
            public event EventHandler UpdateView;
            protected virtual void OnUpdateView(EventArgs e)
            {
                if (UpdateView != null)
                    UpdateView(this, e);
            }
        

            // EVENT: SaveData
            public event DataGridCommandEventHandler SaveData;
            protected virtual void OnSaveData(DataGridCommandEventArgs e)
            {
                if (SaveData != null)
                    SaveData(this, e);
            }
        
        
            // EVENT: InsertData
            public event DataGridCommandEventHandler InsertData;
            protected virtual void OnInsertData(DataGridCommandEventArgs e)
            {
                if (InsertData != null)
                    InsertData(this, e);
            }
        

            // EVENT: DeleteData
            public event DataGridCommandEventHandler DeleteData;
            protected virtual void OnDeleteData(DataGridCommandEventArgs e)
            {
                if (DeleteData != null)
                    DeleteData(this, e);
            }
        

        
            // EVENT HANDLER: Init
            public void OnInit(Object sender, EventArgs e)
            {
                if (AllowFullEditing)
                    AddWorkerColumns();
            }

            // EVENT HANDLER: ItemCreated
            public void OnItemCreated(Object sender, DataGridItemEventArgs e)
            {
                ListItemType lit = e.Item.ItemType;
                if (lit == ListItemType.Item || lit == ListItemType.AlternatingItem)
                    CustomizeItem(e);
            }

            // EVENT HANDLER: CancelCommand
            public void OnCancelCommand(Object sender, DataGridCommandEventArgs e)
            {
                if (e.Item.ItemIndex == 0)
                    CurrentPageIndex = (CurrentPageIndex==0 ?0 :CurrentPageIndex-1);

                // Clears edit mode
                EditItemIndex = -1;

                // Reject changes on the last row
                RejectChanges = true;

                // Show/Hide DELETE column
                ToggleDeleteColumn(true);

                // Refresh view
                OnUpdateView(EventArgs.Empty);
            }

            // EVENT HANDLER: EditCommand
            public void OnEditCommand(Object sender, DataGridCommandEventArgs e)
            {
                // Reject changes on the last row (if any)
                RejectChanges = true;

                // Show/Hide DELETE column
                ToggleDeleteColumn(false);

                // Enable editing on the clicked row
                EditItemIndex = e.Item.ItemIndex;

                // Refresh view
                OnUpdateView(EventArgs.Empty);
            }

            // EVENT HANDLER: UpdateCommand
            public void OnUpdateCommand(Object sender, DataGridCommandEventArgs e)
            {
                // Clear edit mode
                EditItemIndex = -1;

                // Show/Hide DELETE column
                ToggleDeleteColumn(true);

                // Reject changes on the last row
                RejectChanges = true;

                // Update or insert data
                if (MustInsertRow)
                    OnInsertData(e);
                else
                    OnSaveData(e);

                // Refresh view
                OnUpdateView(EventArgs.Empty);
            }
        

            // EVENT HANDLER: DeleteCommand
            public void OnDeleteCommand(Object sender, DataGridCommandEventArgs e)
            {
                // Clear edit mode
                EditItemIndex = -1;

                // Delete data
                OnDeleteData(e);

                // First item in the row, one page back
                if (Items.Count == 1)
                    CurrentPageIndex = (CurrentPageIndex==0 ?0 :CurrentPageIndex-1);

                // Refresh view
                OnUpdateView(EventArgs.Empty);
            }
        

            // EVENT HANDLER: PageIndexChanged
            public void OnPageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
            {
                // Clears edit mode
                EditItemIndex = -1;

                // Reject changes on the last row
                RejectChanges = true;
            
                // Show/Hide DELETE column
                ToggleDeleteColumn(true);

                // Set the new page index
                CurrentPageIndex = e.NewPageIndex;

                // Refresh data
                OnUpdateView(EventArgs.Empty);
            }

        
            /* ---------------------------------------------------------------------*/
            /* ------------------------  INTERNALS ---------------------------------*/
            /* ---------------------------------------------------------------------*/

            // Reject changes on the last row
            private void RejectChangesOnLastRow()
            {
                // Get the underlying DataTable object
                DataTable dt = ((DataView) DataSource).Table;
                DataRow drLast = dt.Rows[dt.Rows.Count-1];
                if (drLast.RowState == DataRowState.Added)
                    drLast.RejectChanges();
            }

            // Show/Hide the DELETE column when in edit mode
            private void ToggleDeleteColumn(bool bViewState)
            {
                int nGridColCount = Columns.Count;
                Columns[nGridColCount-1].Visible = bViewState;
            }

            // Put the grid in edit mode by adding a blank row
            private void InsertNewRow()
            {
                // Show/Hide DELETE column
                ToggleDeleteColumn(false);

                // Get the underlying DataTable object
                DataTable dt = ((DataView) DataSource).Table;
            
                // If any pending changes, stop here...
                DataTable tmpTableOfPendingChanges = dt.GetChanges(DataRowState.Added);
                if (tmpTableOfPendingChanges != null)
                    return;

                // Add the new row
                DataRow row = dt.NewRow();
                dt.Rows.Add(row);

                // Initialize the row
                DataGridInitRowEventArgs dgire = new DataGridInitRowEventArgs();
                dgire.Row = row;
                OnInitRow(dgire);

                // Goto to last page (return last index in the page)
                int nNewItemIndex = SetIndexesToLastPage(dt);

                // Turn edit mode on for the newly added row
                EditItemIndex = nNewItemIndex;
            
                // Tracks that a new row has just been added
                MustInsertRow = true;
            }

            // Update indexes to point to last page
            private int SetIndexesToLastPage(DataTable dt)
            {
                int nRemainder = (dt.Rows.Count % PageSize);
                int nNewItemIndex = nRemainder;
                CurrentPageIndex = (dt.Rows.Count / PageSize)-1;    // 0-based
                if (CurrentPageIndex <0)
                    CurrentPageIndex = 0;
                if (nNewItemIndex >0)
                    CurrentPageIndex ++;

                if (nNewItemIndex == 0)
                    nNewItemIndex = PageSize-1;
                else
                    nNewItemIndex--;

                return nNewItemIndex;
            }

            

            // Add Edit and Delete columns
            private void AddWorkerColumns()
            {
                if (ShowWebdings)
                {
                    EditColumnText = "/";
                    EditColumnUpdateText = "R";
                    EditColumnCancelText = "T";
                    DeleteColumnText = "r";
                }

                // Edit column
                EditCommandColumn editColumn = new EditCommandColumn();
                editColumn.EditText = EditColumnText;
                editColumn.UpdateText = EditColumnUpdateText;
                editColumn.CancelText = EditColumnCancelText;
                if (ShowWebdings)
                {
                    editColumn.ItemStyle.Font.Size = 11;
                    editColumn.ItemStyle.Font.Name = "wingdings 2";
                }
                Columns.Add(editColumn);

                // Delete column
                ButtonColumn deleteColumn = new ButtonColumn();
                deleteColumn.CommandName = "delete";
                deleteColumn.Text = DeleteColumnText;
                if (ShowWebdings)
                    deleteColumn.ItemStyle.Font.Name = "webdings";
                Columns.Add(deleteColumn);
            }

            // Customize items in the grid
            private void CustomizeItem(DataGridItemEventArgs e)
            {
                WebControl wc;

                // Adds a tooltip to Edit
                wc = ((WebControl) e.Item.Cells[Columns.Count-2]);
                wc.ToolTip = "Edit this row";
        
                // Adds a client-side onclick handler and a tooltip to Delete
                wc = ((WebControl) e.Item.Cells[Columns.Count-1]);
                String js = "return confirm('Do you really want to delete this row?');";
                wc.Attributes["onclick"] = js;
                wc.ToolTip = "Delete this row";
            }
        }

        public sealed class DataGridInitRowEventArgs : EventArgs
        {
            public DataRow Row;
        }
    }
}

时间: 2024-09-01 18:42:17

mark新官上任,转贴一个DataGrid(增加删除确认和新增记录功能),道贺:)的相关文章

谷歌中国刘允新官上任三把火:加大销售团队

马晓芳 跟李开复的明星效应相比,刚刚开始全面负责谷歌大中华区销售与运营业务的全球副总裁.大中华区业务总经理刘允显然并不想成为谷歌中国的第二位"明星". "作为职业经理人,任务就是接受一项使命,带领一个团队,达到一个目标."刘允表示.任何问及刘允个人感受的问题都被他转移到谷歌的命题之上,与李开复突出个人形象的做法不同,刘允看上去更希望在谷歌品牌中淡化个人色彩. 加入谷歌之前,刘允担任SK电讯中国区首席执行官的时间长达6年,并于2008年1月加入谷歌,担任谷歌全球副总裁

新官上任三把火,Zynga CEO方言三个月做出改变

zynga-mark-and-don 三周前,我们报道了Zynga的马克·平克斯退位,并且从Xbox请来了唐·马特里克担任Zynga的CEO.唐·马特里克就位后,把自己的桌子放在了FarmVille工作室这一层的正中间,存在感十足.新官上任三把火,唐·马特里克到底准备如何做出改变?今天,他在和投资者的电话会议中给出了未来三个月的一些计划和方向. 在电话会议中,他说:"我会花时间埋头和我的团队一起把重心放在提升我们的产品质量.我想要看到我们如何在各个层级中分派人员,我还将用接下来的90天评估和重新

spring mvc-在springmvc中做一个根据id删除一条数据的功能,出现500问题,代码如下,请大神指教

问题描述 在springmvc中做一个根据id删除一条数据的功能,出现500问题,代码如下,请大神指教 Model层代码 package com.pengyou.model; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Generat

新官上任,转贴一篇:Java做一个最简单的通话程序

程序 Java中的网络编程是一个很重要的部分,也是其编程优越性的地方之一.在Java中有一个专门的Java.net类库来管理网络编程的有关方法. 下面先介绍在Java中怎样用socket进行客户与服务器通信.最后再介绍一个一个最简单的通话程序. 一.怎样用socket进行客户与服务器通信 在Java中用socket进行客户/服务器之间的通信编程.Socket是两个实体之间进行通信的有效端点.通过socket可以获得源IP地址和源端口.终点IP地址和终点端口.用户可以将多个socket连入同一个端

新官上任三把火《最终幻想14》新负责人谈规划

<最终幻想14>毫无疑问成为2010年最让人失望的大作之一,Square Enix为了挽回游戏的声望对于制作团队进行了大换血,吉田直树取代田中弘道成为新的负责人,在新的一年里吉田直树也给出自己对于未来的规划,其中包括游戏本身的改进,他对于公司以及这次人员变动的看法等. 吉田直树表示目前制作团队的人员依旧还在重组和变更中,他本人也不能确定什么时候能够最终完成.目前他们主要的工作是收集玩家们的反馈,以便判断游戏中哪些是好的,哪些是需要改善的.而他们首先将要做的就是对于硬件方面的处理,其中包括改善延

新官上任三把火:王煜磊锁定唯品会优质卖家

3月27日消息,有知情人士向亿邦动力网透露了天猫近期的几个重大策略调整,其中,唯品会成为天猫团队重点"挖角"的对象,唯品会上的优质卖家已基本被天猫锁定. 据了解,天猫于三月初经历管理层震荡,天猫副总裁王煜磊(花名"乔峰")上位成功,接替张勇(阿里巴巴COO.天猫总裁)出任天猫一把手.不过,从商家反馈的信息来看,乔峰上任后已作出表率,并针对2014年天猫的整体方向做出了三个调整: 紧盯唯品会挖角优质买家 据商家透露,乔峰上任后已明确表示,将对所有在唯品会上表现优异的优

国资委新官上任央企董事会建设或发力

张勇 从"试点"到"规范",两个词语微妙变化背后,或意味着央企董事会建设提速在即. 9月4日,国务院国有资产监督管理委员会(下称"国资委")副主任黄淑和在2010中国企业500强发布暨中国大企业高峰会上表示,我国大企业首要努力的方向是进一步完善公司治理,重点建设好规范的董事会,形成股东会.董事会.监事会.经理层,各负其责,协调运转,有效制衡的机制. 此前,国资委一直力推央企董事会试点工作,这也是刚刚离任的首任国资委主任李荣融7年任期内未竟的事业目

对Datagrid添加删除确认的脚本

datagrid|脚本 private void dgTeam_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if(e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.Item) { LinkButton btnLinkDelete=(LinkButton)e.Item.Ce

新领导上任:如何从个人速赢到集体速赢?

在2009年2月的哈佛商业评论领导力转型特辑中刊登了马克·范布伦(Mark E. Van Buren)托德·萨弗斯通(Todd Safferstone)的一篇文章<速赢的悖论>.他们指出,高效的新领导有一个显著特点--非常关注结果.他们中的大多数人都设法取得了"速赢"(quick win),即上任后不久便对企业的成功做出了不同以往的显著贡献. 他们列举了一些速赢的陷阱,但他们又指出,"对于新领导来说,速赢压力永远不会消失,也不应该消失."他们给出的解决办