برنامه نویس وب


ﺳﻪشنبه 29 آبان
MVC

ساخت گرید devexpress با ستون های داینامیک

ﺳﻪشنبه, 23 آبان 1396

توی این مطلب می خوام در مورد گرید devexpress صحبت کنم این مطلب واسه ساختن ستون های داینامیک در گرید devexpress هست امیدوارم به دردتون بخوره، توی یه پروژه این کار ازم خواستند و کلی سرچ زدم کلی روشهای مختلف امتحان کردم تا تونستم اینکار انجام بدم مشکلی که گرید devexpress داره تا اونجایی که من فهمیدم نوع داده json نمی گیره پس نمی تونیم ستونها رو اینجوری بسازیم توی کندو اینکار میشه به راحتی با ساخت یک json انجام داد اما اینجا نمیشد بلکه باید یک مدل از نوع سی شارپ بسازیم که واسه اینکار هم ما نمی تونیم اسم پراپرتی هامون از نوع متغییر بگیریم باید لحظه کد نویسی اسم پراپرتی هامون به صورت کاملا استاتیک بهش بدیم هر چی سرچ زدم نمی شد تا بلاخره با نوع داده Dictionary تونستم اینکار بکنم اما گرید ویو نوع Dictionary نمی شناخت ، در نتیجه اون تبدیل به DataTable کردم و مشکل حل شد در ادامه کدها رو میذارم که مشکلی از این بابت نداشته باشید.

                var it = new List<Dictionary<string, object>>();

                foreach (var item in model)
                {
                    var dictionary = new Dictionary<string, object>
                    {
                        {"Id", item.Id},
                        {"نام", item.Name}
                    };
                    foreach (var j in columns)
                    {

                        dictionary.Add(j.Name, j.Value);
                    }
                    it.Add(dictionary);
                }

                var dt = ToDataTable(it);

 

در اینجا ما یک کلید داریم و یک ستون ثابت به اسم نام و بقیه ستونهای ثابت می تونیم مثل همین بهش اضافه کنیم و در قسمت بعد ستونهای داینامیک به dictionary مون اضافه می کنیم و در آخر اون به یک لیست add می کنیم و بعدش اون به متد ToDataTable می فرستیم که کدش در ادمه می ذارم.

 

 private static DataTable ToDataTable(IReadOnlyCollection<Dictionary<string, object>> list)
        {
            var result = new DataTable();
            if (list.Count == 0)
                return result;

            var columnNames = list.SelectMany(dict => dict.Keys).Distinct();
            result.Columns.AddRange(columnNames.Select(c => new DataColumn(c)).ToArray());
            foreach (var item in list)
            {
                var row = result.NewRow();
                foreach (var key in item.Keys)
                {
                    row[key] = item[key];
                }

                result.Rows.Add(row);
            }

            return result;
        }

حالا این DataTable می فرستیم سمت ویو و اونجا اون می گیریم و گرید خودمون می سازیم

 

@model System.Data.DataTable


        foreach (System.Data.DataColumn column in Model.Columns)
        {
            if (column.ColumnName== "Id")
            {
                settings.Columns.Add("Id").Visible = false;
            }else
            {
                settings.Columns.Add(column.ColumnName);
            }
        }

 



نظرات

Drag to order
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
نظر تایید شده ای برای این مطلب وجود ندارد .