- [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
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google 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!