- Giới thiệu về Stock Tracker Widget - Công cụ theo dõi cổ phiếu bằng C# và WPF
- [VB.NET] Chia sẻ công cụ nhập số tiền tự động định dạng tiền tệ Việt Nam
- [VB.NET] Hướng dẫn fill dữ liệu từ winform vào Microsoft word
- [VB.NET] Hướng dẫn chọn nhiều dòng trên Datagridview
- GIỚI THIỆU TOOL: DUAL MESSENGER TOOLKIT
- [PHẦN MỀM] Giới thiệu Phần mềm Gmap Extractor
- Hướng Dẫn Đăng Nhập Nhiều Tài Khoản Zalo Trên Máy Tính Cực Kỳ Đơn Giản
- [C#] Chia sẻ source code phần mềm đếm số trang tập tin file PDF
- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- Giới thiệu về Stock Tracker Widget - Công cụ theo dõi cổ phiếu bằng C# và WPF
- [VB.NET] Chia sẻ công cụ nhập số tiền tự động định dạng tiền tệ Việt Nam
- [VB.NET] Hướng dẫn fill dữ liệu từ winform vào Microsoft word
- [VB.NET] Hướng dẫn chọn nhiều dòng trên Datagridview
- GIỚI THIỆU TOOL: DUAL MESSENGER TOOLKIT
- [PHẦN MỀM] Giới thiệu Phần mềm Gmap Extractor
- Hướng Dẫn Đăng Nhập Nhiều Tài Khoản Zalo Trên Máy Tính Cực Kỳ Đơn Giản
- [C#] Chia sẻ source code phần mềm đếm số trang tập tin file PDF
- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- Giới thiệu về Stock Tracker Widget - Công cụ theo dõi cổ phiếu bằng C# và WPF
- [VB.NET] Chia sẻ công cụ nhập số tiền tự động định dạng tiền tệ Việt Nam
- [VB.NET] Hướng dẫn fill dữ liệu từ winform vào Microsoft word
- [VB.NET] Hướng dẫn chọn nhiều dòng trên Datagridview
- GIỚI THIỆU TOOL: DUAL MESSENGER TOOLKIT
- [PHẦN MỀM] Giới thiệu Phần mềm Gmap Extractor
- Hướng Dẫn Đăng Nhập Nhiều Tài Khoản Zalo Trên Máy Tính Cực Kỳ Đơn Giản
- [C#] Chia sẻ source code phần mềm đếm số trang tập tin file PDF
- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
[DEVEXPRESS] Di chuyển vào sắp xếp dữ liệu trên GridView sử dụng Behavior Manager
![[DEVEXPRESS] Di chuyển vào sắp xếp dữ liệu trên GridView sử dụng Behavior Manager](https://laptrinhvb.net/uploads/users/9a8cb514e4428e85fb4ca07588e9103f.png)
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!
THÔNG TIN TÁC GIẢ
NGUYỄN THẢO
Founder at LaptrinhVB.net
★★★★★
♥ Tình yêu thương chẳng hề hư mất bao giờ. (Cr 13,4)
=========================================================================
My skills includes .NET(C#, VB.NET), DevExpress, Java, Android, PHP,
Python, Sqlserver, Mysql, Reactjs, Dart, Flutter, API services and lot more...
Phone/Zalo/Telegram/WhatsApp: ☎️ (+84)933.913122
Zalo: https://zalo.me/0933913122
Email: nguyenthao.laptrinhvb@gmail.com
My Github: https://github.com/nguyenthao1988
Facebook: https://fb.com/Lewandowski28031988
Youtube Channel: https://www.youtube.com/@thaomeotv

=========================================================================
BÀI VIẾT LIÊN QUAN
![[DEVEXPRESS] Di chuyển vào sắp xếp dữ liệu trên GridView sử dụng Behavior Manager](https://laptrinhvb.net/uploads/users/9a8cb514e4428e85fb4ca07588e9103f.png)