- [DEVEXPRESS] Hướng dẫn bật tính năng Scroll Pixcel in Touch trên GridView
- [DEVEXPRESS] Hướng dẫn sử dụng TileBar viết ứng dụng duyệt hình ảnh Winform
- [DEVEXPRESS] Tô màu border TextEdit trên Winform
- [C#] Lấy dữ liệu từ Console Write hiển thị lên textbox Winform
- [C#] Hiển thị Progress bar trên Window Console
- [C#] Di chuyển control Runtime và lưu layout trên winform
- [SQLSERVER] Sử dụng hàm NULL IF
- [C#] Chia sẽ source code mã đi tuần bằng giao diện Winform
- [C#] Flash Window in Taskbar Winform
- Download và Giải nén tập tin File sử dụng Powershell
- [C#] Hướng dẫn cách lấy thông tin đăng nhập tài khoản và mật khẩu web browser trên windows
- [VB.NET] CRUD Thêm xóa sửa tìm kiếm Realtime FireBase
- [C#] Hiển thị thông báo Toast Message trong lập trình Winform
- [C#] Cấu hình định dạng ngày tháng, thời gian trên Windows cho ứng dụng Winform
- [C#] Rút gọn đường dẫn link url với TinyURL API
- [C#] Hướng dẫn cách bo tròn winform with Radius
- [C#] Chia sẽ class BackGroundOverlay Show Modal cho Winform
- [C#] Hướng dẫn Flip Image Winform
- [C#] Invoke là gì? cách sử dụng phương thức Invoke()
- [C#] Hướng dẫn chia sẽ file, folder từ ứng dụng sang Zalo Chat
[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!