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

来源:互联网 发布:C语言roll程序 编辑:程序博客网 时间:2024/06/06 02:18
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
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)共2页: 上一页 1 [2] 下一页 <script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>