- [C#] Ẩn ứng dụng winform từ Apps vào Background Process trên Task Manager
- [SQLSERVER] Xử lý ngoại lệ sử dụng TRY...CATCH và RAISEERROR
- [C#] Bắt sự kiện bàn phím chuột bên ngoài ứng dụng winform sử dụng thư viện MouseKeyHook
- [DEVEXPRESS] Đặt mật khẩu và bỏ mật khẩu tập tin file PDF
- [C#] Thêm ứng dụng vào Taskbar sử dụng SharpShell DeskBand
- [C#] Hướng dẫn thêm text vào hình ảnh icon winform
- [C#] Chia sẽ tổng hợp source code đồ án về Csharp
- [C#] Hướng dẫn viết ứng dụng quay màn hình video winform, Screen Recorder
- [C#] Hướng dẫn sử dụng thư viện Input Simulator để làm việc với Keyboard, Mouse Virtual
- [DEVEXPRESS] Hướng dẫn tích Filter Contain khi click chuột phải vào cell selection trên Gridview
- [C#] Tra cứu mã số thuế cá nhân bằng CMND hoặc CCCD
- [C#] Convert hình ảnh image thành Blurhash sử dụng trong loading image winform
- [POWERSHELL] Script sao lưu backup và nén database sqlserver
- [C#] Giới thiệu thư viện Autofac Dependency Injection
- [C#] Hướng dẫn tạo Windows Services đơn giản Winform
- [C#] Một click chuột điều khiển máy tính từ xa sử dụng Ultraviewer
- Hướng dẫn đóng gói phần mềm sử dụng Powershell biên dịch script thành file exe
- [C#] Hướng dẫn sử dụng Task Dialog trên NET 5
- [C#] Hướng dẫn xem lịch sử các trang web đã truy cập trên Chrome Browser
- [C#] Hướng dẫn lấy thông tin Your ID và Password của Ultraviewer Winform
[DEVEXPRESS] Di chuyển vào sắp xếp dữ liệu trên GridView sử dụng Behavior Manager
Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn cách DragDrop dùng để sắp xếp từng dòng trên GridView sử dụng Behavior Manager Devexpress C# Winform.
[DEVEXPRESS] Re Order Row in GridView C# winform using Behavior manager
Dưới đây là giao diện demo ứng dụng sắp xếp dữ liệu trên Gridview, dưới đây là giao diện demo ứng dụng:
Ở hình trên, các bạn thấy mình dễ dàng sắp xếp từng dòng theo ý muốn của mình.
Bên thanh công cụ, toolbox các bạn kéo behaviorManager vào project và cấu hình như hình bên dưới:
Full source code Re order drag and drop gridview devexpress C#:
using DevExpress.Utils.DragDrop;
using DevExpress.Utils.Drawing;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace reOrderGridView
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
public Form1()
{
InitializeComponent();
var datatable = new DataTable();
datatable.Columns.Add("avatar", typeof(byte[]));
datatable.Columns.Add("stt", typeof(int));
datatable.Columns.Add("name", typeof(string));
datatable.Columns.Add("address", typeof(string));
datatable.Columns.Add("gender", typeof(string));
datatable.Rows.Add(GetImageFromName("Nguyễn Thảo"), 1, "Nguyễn Thảo", "Bà Rịa Vũng Tàu", "Nam");
datatable.Rows.Add(GetImageFromName("Nguyễn Thị Cẩm Tú"), 2, "Nguyễn Thị Cẩm Tú", "Kiên Giang", "Nữ");
datatable.Rows.Add(GetImageFromName("Nguyễn Đình Tuyên"), 3, "Nguyễn Đình Tuyên", "Quảng Bình", "Nữ");
datatable.Rows.Add(GetImageFromName("Nguyễn Phương Nhi"), 4, "Nguyễn Phương Nhi", "Quảng Bình", "Thừa Thiên Huế");
datatable.Rows.Add(GetImageFromName("Võ Sơn Băng"), 5, "Võ Sơn Băng", "Vĩnh Long", "Nam");
datatable.Rows.Add(GetImageFromName("Hoàng Thị Thảo"), 6, "Hoàng Thị Thảo", "Nghệ An", "Nữ");
datatable.Rows.Add(GetImageFromName("Dương Quá"), 7, "Dương Quá", "Trung Quốc", "Nam");
datatable.Rows.Add(GetImageFromName("Long Cô Cô"), 8, "Long Cô Cô", "Trung Quốc", "Nữ");
gridControl1.DataSource = datatable;
HandleBehaviorDragDropEvents();
gridView1.OptionsBehavior.Editable = false;
}
public void HandleBehaviorDragDropEvents()
{
DragDropBehavior gridControlBehavior = behaviorManager1.GetBehavior<DragDropBehavior>(this.gridView1);
gridControlBehavior.DragDrop += Behavior_DragDrop;
gridControlBehavior.DragOver += Behavior_DragOver;
}
private void Behavior_DragOver(object sender, DragOverEventArgs e)
{
DragOverGridEventArgs args = DragOverGridEventArgs.GetDragOverGridEventArgs(e);
e.InsertType = args.InsertType;
e.InsertIndicatorLocation = args.InsertIndicatorLocation;
e.Action = args.Action;
Cursor.Current = args.Cursor;
args.Handled = true;
}
private void Behavior_DragDrop(object sender, DevExpress.Utils.DragDrop.DragDropEventArgs e)
{
GridView targetGrid = e.Target as GridView;
GridView sourceGrid = e.Source as GridView;
if (e.Action == DragDropActions.None || targetGrid != sourceGrid)
return;
DataTable sourceTable = sourceGrid.GridControl.DataSource as DataTable;
Point hitPoint = targetGrid.GridControl.PointToClient(Cursor.Position);
GridHitInfo hitInfo = targetGrid.CalcHitInfo(hitPoint);
int[] sourceHandles = e.GetData<int[]>();
int targetRowHandle = hitInfo.RowHandle;
int targetRowIndex = targetGrid.GetDataSourceRowIndex(targetRowHandle);
List<DataRow> draggedRows = new List<DataRow>();
foreach (int sourceHandle in sourceHandles)
{
int oldRowIndex = sourceGrid.GetDataSourceRowIndex(sourceHandle);
DataRow oldRow = sourceTable.Rows[oldRowIndex];
draggedRows.Add(oldRow);
}
int newRowIndex;
switch (e.InsertType)
{
case InsertType.Before:
newRowIndex = targetRowIndex > sourceHandles[sourceHandles.Length - 1] ? targetRowIndex - 1 : targetRowIndex;
for (int i = draggedRows.Count - 1; i >= 0; i--)
{
DataRow oldRow = draggedRows[i];
DataRow newRow = sourceTable.NewRow();
newRow.ItemArray = oldRow.ItemArray;
sourceTable.Rows.Remove(oldRow);
sourceTable.Rows.InsertAt(newRow, newRowIndex);
}
break;
case InsertType.After:
newRowIndex = targetRowIndex < sourceHandles[0] ? targetRowIndex + 1 : targetRowIndex;
for (int i = 0; i < draggedRows.Count; i++)
{
DataRow oldRow = draggedRows[i];
DataRow newRow = sourceTable.NewRow();
newRow.ItemArray = oldRow.ItemArray;
sourceTable.Rows.Remove(oldRow);
sourceTable.Rows.InsertAt(newRow, newRowIndex);
}
break;
default:
newRowIndex = -1;
break;
}
int insertedIndex = targetGrid.GetRowHandle(newRowIndex);
targetGrid.FocusedRowHandle = insertedIndex;
targetGrid.SelectRow(targetGrid.FocusedRowHandle);
if (checkEdit1.Checked)
{
ReOrder();
}
}
public byte[] GetImageFromName(string name)
{
var char_name = GetFirstAndLastLetterFromName(name);
Size imageSize = new System.Drawing.Size(32, 32);
Image img_name = GlyphPainter.CreateRoundedStubGlyph(defaultLookAndFeel1.LookAndFeel, imageSize, char_name);
using (var ms = new MemoryStream())
{
img_name.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
}
public string GetFirstAndLastLetterFromName(string name)
{
string first = name.Substring(0, 1);
char[] charArray = name.ToCharArray();
Array.Reverse(charArray);
string last = new string(charArray);
if (last.Contains(' '))
{
char[] splitchar = { ' ' };
string[] temp = last.Split(splitchar);
int b = temp[0].ToString().Length - 2;
int c = temp[0].ToString().Length - 1;
last = temp[0].ToString().Substring(c, 1);
}
else
{
return first.ToUpper();
}
return ConvertToUnsign(first + last).ToUpper();
}
Regex ConvertToUnsign_rg = null;
public string ConvertToUnsign(string strInput)
{
if (ReferenceEquals(ConvertToUnsign_rg, null))
{
ConvertToUnsign_rg = new Regex("p{IsCombiningDiacriticalMarks}+");
}
var temp = strInput.Normalize(NormalizationForm.FormD);
return ConvertToUnsign_rg.Replace(temp, string.Empty).Replace("đ", "d").Replace("Đ", "D").ToLower();
}
public void ReOrder()
{
var dataView = gridView1.DataSource as DataView;
int index = 1;
foreach (DataRowView rowView in dataView)
{
DataRow row = rowView.Row;
row["stt"] = index;
index++;
}
}
private void btn_reorder_Click(object sender, EventArgs e)
{
ReOrder();
}
}
}
Thanks for watching!