How To Dynamic Columns From Array

How To Dynamic Columns From Array

adiirawanadiirawan Posts: 1Questions: 1Answers: 0

Hi guys, my name is adi
I started using this plugin and I need your help.
I don't know how to display dynamic columns from data arrays

This is my code:

RESULT COLUMN ARRAY

![](https://datatables.net/forums/uploads/editor/dj/6m8bu8edbd2c.png "")

HTML

<table class="table table-hover" id="collar">
                                      
 </table>

JAVASCRIPT

$(document).ready(function () {
    var columns = []; // array
    var response = null;
           
            $('#btn-show-collar').click(function () {                               
                $('#collar').DataTable({
                    "processing": true,
                    "serverSide": true,   
                    "ajax": function (data, callback, settings) {
                        $.ajax({
                            url: '/HO/DrillHole/CollarGetAll',
                            type: 'POST',
                            data: data,
                            success: function (data) {                                

                                response = data.data;

                                $.each(response[0], function (key, value) {
                                    var my_item = {};                                   
                                    my_item.title = key;
                                    my_item.data = key;
                                    columns.push(my_item);

                                });

                                //console.log(response);
                                callback(data);                                
                            }
                        })
                    },                                     
                    "data": response,                     
                    "columns": columns

                });                         
               

            });
}

SERVER SIDE C#

 public class DataTableParamObject
    {
        public int draw { get; set; }
        public List<Column> columns { get; set; }
        public List<Order> order { get; set; }
        public int start { get; set; }
        public int length { get; set; }
        public Search search { get; set; }
    }

    public class Column
    {
        public string data { get; set; }
        public string name { get; set; }
        public bool searchable { get; set; }
        public bool orderable { get; set; }
        public Search search { get; set; }
    }

    public class Search
    {
        public string value { get; set; }
        public bool regex { get; set; }
    }

    public class Order
    {
        public int column { get; set; }
        public string dir { get; set; }
    }
public object GetDataTable(DataTableParamObject param)
        {
            // Get all mandatory fields            
            var fieldNames = typeof(HoleLocation).GetProperties().Where(f => f.Name.ToUpper() != "CREATEDDATE"
                                && f.Name.ToUpper() != "CREATEDBY"
                                && f.Name.ToUpper() != "PROJECT"
                                && f.Name.ToUpper() != "TENEMENT"
                                && f.Name.ToUpper() != "HOLETYPE"
                                && f.Name.ToUpper() != "GRIDNAME"
                                && f.Name.ToUpper() != "ITEM")

                                .Select(f => f.Name).ToList();

            // get all HoleLocation
            var holeLocations = _dbContext.HoleLocation.ToList();


            var search = param.search.value ?? "";
            var totalRecord = holeLocations.Count();

            var result = holeLocations.Where(c =>
                      c.HoleId.Contains(search, StringComparison.InvariantCultureIgnoreCase) ||
                      c.ProjectCode.Contains(search, StringComparison.InvariantCultureIgnoreCase) ||
                      c.TenementId.Contains(search, StringComparison.InvariantCultureIgnoreCase) ||
                      c.HoleTypeId.Contains(search, StringComparison.InvariantCultureIgnoreCase));

            switch (param.order[0].column)
            {
                case 1:
                    if (param.order[0].dir.Equals("asc"))
                    {
                        result = result.OrderBy(c => c.HoleId);
                    }
                    else
                    {
                        result = result.OrderByDescending(c => c.HoleId);
                    }
                    break;
                case 2:
                    if (param.order[0].dir.Equals("asc"))
                    {
                        result = result.OrderBy(c => c.ProjectCode);
                    }
                    else
                    {
                        result = result.OrderByDescending(c => c.ProjectCode);
                    }
                    break;
                case 3:
                    if (param.order[0].dir.Equals("asc"))
                    {
                        result = result.OrderBy(c => c.TenementId);
                    }
                    else
                    {
                        result = result.OrderByDescending(c => c.TenementId);
                    }
                    break;
                case 4:
                    if (param.order[0].dir.Equals("asc"))
                    {
                        result = result.OrderBy(c => c.HoleTypeId);
                    }
                    else
                    {
                        result = result.OrderByDescending(c => c.HoleTypeId);
                    }
                    break;
            }

            result = result.Skip(param.start).Take(param.length);

            // get all HoleCode
            List<HoleCode> holeCodes = _dbContext.HoleCode.ToList();

            List<object> holelocationList = new List<object>();

            foreach (HoleLocation holeLocation in result)
            {
                dynamic holeLocationObject = new ExpandoObject();

                foreach (string fieldName in fieldNames)
                {
                    string val = holeLocation[fieldName] != null ? holeLocation[fieldName].ToString() : "";

                    ((IDictionary<String, Object>)holeLocationObject)[fieldName] = string.IsNullOrEmpty(val) ? "" : val;
                }

                foreach (HoleCode holeCode in holeCodes)
                {
                    try
                    {
                        HoleDetails holeDetail = _dbContext.HoleDetails.Where(td => td.Name == holeCode.Name).FirstOrDefault();

                        ((IDictionary<String, Object>)holeLocationObject)[holeDetail.Name] = holeDetail == null || string.IsNullOrEmpty(holeDetail.Value) ? "" : holeDetail.Value;

                    }
                    catch (Exception)
                    {

                    }
                }

                holelocationList.Add(holeLocationObject);
            }

            return new
            {
                draw = param.draw,
                recordsTotal = holelocationList.Count(),
                recordsFiltered = totalRecord,
                data = holelocationList
            };

           
        }

I use the code above the results like this

![](https://datatables.net/forums/uploads/editor/wf/36ukx2smqm1c.png "")

Answers

This discussion has been closed.