DevExpress控件使用交流,DevExpress中国社区 售前咨询
当前位置: 首页 > 新闻 » DevExpress XtraGrid巧用剪切与粘贴修改数据行显示顺序

DevExpress XtraGrid巧用剪切与粘贴修改数据行显示顺序

作者:huhm   来源:本站   浏览:Loading...次   发布时间:2012-04-27   评论:0条

NET中没有数据缓冲的概念,实现Insert操作都难,在自定义报表中修改数据行显示顺序更是十分麻烦。本文将介绍如何通过简单的剪切与粘帖来实现数据行顺序的修改。

ShowSequence保存字段的显示顺序,右键菜单提供剪切和粘贴功能,允许用户多选和多次剪切然后一次粘贴,若右键在空白区域,增行显示在最末行以后;否则插入在选择行的前面,并默认选中被插入行的首行。

clickSpace保存右键的位置是空白区域or not。在GridView的MouseUp事件中实现,注意如何判定光标所在位置的做法。

代码段如下:

  private void gridViewStyleSheet_MouseUp(object sender, MouseEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = gridViewStyleSheet.CalcHitInfo(e.Location);
            if (e.Button == MouseButtons.Right &
                hi.HitTest == DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitTest.EmptyRow)
            {
                clickSpace = true;
            }
            else
            {
                clickSpace = false;
            }
            //MessageBox.Show(clickSpace.ToString());
        }

剪切:用一个DataTable存储移出的数据,然后从gridview中删除记录。注意每次剪切前DataTable必须清空(clear),注意行从一个DataTable复制到另一个DataTable的做法。另外一个做法是用DataRow.ItemArray.由于是地址引用,不可以直接用DataRow赋值。

代码段如下:

 private void iCut_Click(object sender, EventArgs e)
        {
            dt.Clear();
            int[] selectedRowHandle = gridViewStyleSheet.GetSelectedRows();
            foreach (int i in selectedRowHandle)
            {
                dt.ImportRow(gridViewStyleSheet.GetDataRow(i));
            }
            gridViewStyleSheet.DeleteSelectedRows();
        }

粘贴:分为两种情况,一是Insert,二是Apprend。若在行上右键则为Insert,若为空白区域则为Append。由clickSpace界定。Insert时,将focusrow及其以后的行均移入DataTable,变相实现插入功能。

代码段如下:

        private void iPaste_Click(object sender, EventArgs e)
        {
            int curRowHandle = gridViewStyleSheet.FocusedRowHandle;
            int rowCount = gridViewStyleSheet.RowCount;
            if (!clickSpace)
            {
                //实现插入行功能
                if (curRowHandle < rowCount)
                {
                    for (int i = curRowHandle; i <= rowCount; i++)
                    {
                        dt.ImportRow(gridViewStyleSheet.GetDataRow(i));
                        gridViewStyleSheet.SelectRow(i);
                    }
                    gridViewStyleSheet.DeleteSelectedRows();
                }
            }
            else
            {
                curRowHandle = gridViewStyleSheet.RowCount;
            }

            foreach (DataRow dataRow in dt.Rows)
            {
                gridViewStyleSheet.AddNewRow();
                int rowHandle = gridViewStyleSheet.FocusedRowHandle;
                DataRow newRow = gridViewStyleSheet.GetDataRow(rowHandle);
                if (newRow != null)
                {
                    newRow.ItemArray = dataRow.ItemArray;
                }
            }
            dt.Clear();
            gridViewStyleSheet.SelectRow(curRowHandle);
            this.Validate();
            styleSheetBindingSource.EndEdit();
        }

保存:保存时按照显示顺序对ShowSequence进行赋值。

代码段如下:

private void iSave_Click(object sender, EventArgs e)
        {
            try
            {
                int rowCount = gridViewStyleSheet.RowCount;
                for (int i = 0; i < rowCount; i++)
                {
                    gridViewStyleSheet.SetRowCellValue(i, "ShowSequence", i + 1);
                }

                this.Validate();
                styleSheetBindingSource.EndEdit();
                styleBindingSource.EndEdit();
                styleSheetTableAdapter.Update(dSStyle.StyleSheet);
                styleTableAdapter.Update(dSStyle.Style);
            }
            catch (DBConcurrencyException ex)
            {
                MessageBox.Show(ex.Row[0].ToString() + ex.Message);
            }
            finally
            {
                //gridViewStyleSheet.OptionsCustomization.AllowSort = true;
            }
        }

至此,修改数据行的显示顺序便实现了。

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [http://www.devexpresscn.com/]
本文地址:http://www.devexpresscn.com/news/DevExpress-news-80.html

关键字: XtraGrid  数据   

相关产品: DXperience Universal Subscription

评论列表

暂无评论

请谈谈你的看法 请使用IE或者Firefox浏览器,暂不支持Chrome!

昵称 不填则默认为游客评论

DevExpress DXperience DXv2 v12

DevExpress DXperience 下载 download

DevExpress购买、价格、授权

慧都控件网为DevExpress界面控件的中国地区唯一正式授权经销商,正版控件销售公司,授权代理商,经销商及合作伙伴。

电话:400-700-1020
        023-66090381

邮箱:sales@evget.com

>>如何选择正规控件购买渠道