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
评论列表
暂无评论
请谈谈你的看法 请使用IE或者Firefox浏览器,暂不支持Chrome!
慧都控件网为DevExpress界面控件的中国地区唯一正式授权经销商,正版控件销售公司,授权代理商,经销商及合作伙伴。
电话:400-700-1020
023-66090381
邮箱:sales@evget.com
相关资源
- GridControl大数据加载时如何优化性能
- 如何使Grid没有聚焦行?
- XtraGrid如何使单元格只读?
- 怎么保存并读入GridControl里的过滤条件?
- 如何将数据库里的数据与XtraTreeList进行绑定
- XtraTreeList怎样隐藏过滤编辑面板
- 如何在GridControl的一列中显示外部图片?
- ChartControl大数据加载时有哪些性能优化方法
- XtraRibbon可以修改界面显示的DX默认图标么?
- 在XtraGrid自定义表尾时为何运行时正常但预览时消失
- ASPxGridView如何使用内置的HyperLink编辑器创建一个超链接列?
- 如何在ASPxGridView的DetailRow中显示图表?
- ASPxGridView的单元格如何换行或省略部分文本
- 绑定属性到propertyGridControl上时可否只显示需要的数据
- 可否去掉XtraScheduler日程创建时的Any选项
- 如何让TreeList的每个结点高亮显示?
- ASP.NET ASPxGridView使用方法大全
- 如何设置XtraGrid数据源