Devexpress Gridview 사용자임의 정렬한 데이터를 List<T> 형태로 변환 문의

안녕하세요.
.NET 초보 개발자 입니다.

Devexpress GridControl, GridView 관련 질문입니다.

gridControl.DataSource에 List 데이터를 넣고
그리드 사용자 임의 정렬 후 gridView 데이터를 List 데이터에 넣을려고 합니다.

var list = gridView1.DataSource as List<Person>;

위 소스코드는 데이터 정렬과 상관없이 데이터를 받을 수 는 있지만
정렬된 데이터는 적용이 안되는걸 확인 했습니다.

아래에 예시 소스코드입니다.

using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GridViewConvert
{
    public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm
    {
        public XtraForm1()
        {
            InitializeComponent();
            gridControl1.DataSource = InitData();
        }

        private List<Person> InitData()
        {
            var list = new List<Person>()
            {
                new Person() {Id=1,Name="유재석",Age=51},
                new Person() {Id=2,Name="강호동",Age=53},
                new Person() {Id=3,Name="이수근",Age=48},
            };

            return list;
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            var list = gridView1.DataSource as List<Person>;
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("\n");
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return string.Format($"Id:{Id}\t Name:{Name}\t Age:{Age}");
        }
    }
}

20230814_141040

20230814_141229


질문을 올리고 다시 생각하니 되네요. 여러테이블이 있어 제네릭타입 으로 코드를 만들었습니다.

    public class DataConvert
    {
        public static List<T> ConvertDataTable<T>(GridView gv)
            where T : class
        {
            List<T> result = new List<T>();
            for (int i = 0; i < gv.RowCount; i++)
            {
                var data = gv.GetRow(i) as T;
                result.Add(data!);
            }
            return result;
        }
    }

수고하세요!^^

4개의 좋아요

CollectionView를 적용해 보시는건 어떠세요?

4개의 좋아요