Bind Dynamic Table in MVC


EmployeesController

 public ActionResult Index()
 {
     return View();
 }

 //GET JSON Method for Get details
 public JsonResult GetEmployeeDetails(int ID, string tableName)
 {
     JsonResult json = new JsonResult();
     DataTable dtEmployeeDetails = new DataTable();
     dtEmployeeDetails = GetDetails(tableName);

     if (dtEmployeeDetails != null)
     {
         string returnData = GetJson(dtEmployeeDetails);
         json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
         json.Data = returnData;
         return json;
         //  return Json(returnData, JsonRequestBehavior.AllowGet);
     }
     else
         return Json("nosession", JsonRequestBehavior.AllowGet);
 }

public DataTable GetDetails(string tableName)
{
    DataTable dtEmployeeDetails = new DataTable(tableName);
    dtEmployeeDetails.Columns.Add("EmpNo");
    dtEmployeeDetails.Columns.Add("EmpName");
    dtEmployeeDetails.Columns.Add("EmpDesignation");
    dtEmployeeDetails.Columns.Add("EmpSalary");
    dtEmployeeDetails.Rows.Add("CS001", "Senthil", "Software Engineer", "00000");
    dtEmployeeDetails.Rows.Add("CS001", "Sugesh", "Software Tester", "00001");
    dtEmployeeDetails.Rows.Add("CS001", "Asif", "Software Engineer", "00002");
    dtEmployeeDetails.Rows.Add("CS001", "Vishnu", "Software Tester", "00003");
    dtEmployeeDetails.Rows.Add("CS001", "Kiran", "Software Engineer", "00004");
    return dtEmployeeDetails;
}

 //Convert DataTable to JSON
 public static string GetJson(DataTable dt)
 {
     System.Web.Script.Serialization.JavaScriptSerializer serializer =
        new System.Web.Script.Serialization.JavaScriptSerializer();
     List<Dictionary<string, object>> rows =
        new List<Dictionary<string, object>>();
     Dictionary<string, object> row = null;

     foreach (DataRow dr in dt.Rows)
     {
         row = new Dictionary<string, object>();
         foreach (DataColumn col in dt.Columns)
         {
             row.Add(col.ColumnName, dr[col]);
         }
         rows.Add(row);
     }
     return serializer.Serialize(rows);
 }



View

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<div id="HeadingPage" class="hide">
    <div class="row"></div>
</div>

<div id="ShowGrid" class="tab-content table-responsive">
    <div class="row"></div>
</div>

<script src="~/Scripts/jquery-2.0.0.min.js"></script>
<script src="~/Scripts/EmployesScript.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        BindDynamicTable();
    });

</script>


EmployeesScripts.js

function BindDynamicTable() {
    var baseurl = (window.location.protocol + "//" + window.location.host + "/").replace('Employees/', '');
    var url = baseurl + 'Employees/GetEmployeeDetails?ID=1&tableName="DynamicHTML"';

    $.getJSON(url).success(function (result) {

        jsonString = $.parseJSON(result);
        console.log(jsonString);
        $("#HeadingPage .row").append('<div style="text-align: center;"><b><h2> Dynamic HTML Table</h2></b></div>');

        var headingRowBuilder = new StringBuilder();
        headingRowBuilder.append("<table class=\"table\" align=\"center\" border=\"2\"><thead>");
        headingRowBuilder.append("<tr style=\"background-color: orange; color: white\">");
        var isValid = true;
        var firstColumn;

        $.each(jsonString, function (i, item) {
            for (var i in item) {
                if (isValid) {
                    firstColumn = i;
                    isValid = false;
                    headingRowBuilder.append("<th class=\"col-md-1\" style=\"padding-top: 2px; padding-bottom: 2px;\">" + i + "</th>");
                    continue;
                }

                if (i == firstColumn) {
                    break;
                }
                headingRowBuilder.append("<th class=\"col-md-1\" style=\"padding-top: 2px; padding-bottom: 2px;\">" + i + "</th>");
            }
        });

        headingRowBuilder.append("</tr>");
        headingRowBuilder.append("</thead></table>");

        var headingRow = headingRowBuilder.toString();
        mytable = $(headingRow).attr({ id: "tblDynamicTable" });

        $.each(jsonString, function (i, item) {
            var row = $('<tr  style="padding-top: 2px; padding-bottom: 2px;"></tr>').attr({ class: ["col-md-1"].join(' ') }).appendTo(mytable);

            for (var i in item) {
                $('<td class="col-md-1" style="text-align: left"><div style="color: black">' + item[i] + '</div></td>').appendTo(row);
            }
        });
        mytable.appendTo("#ShowGrid");
    });
}



//StringBuilder Method
function StringBuilder(value) {
    this.strings = new Array("");
    this.append(value);
}

StringBuilder.prototype.append = function (value) {
    if (value) {
        this.strings.push(value);
    }
}

StringBuilder.prototype.clear = function () {
    this.strings.length = 1;
}

StringBuilder.prototype.toString = function () {
    return this.strings.join("");
}

Comments

Popular posts from this blog

Sites.Selected | Graph API SharePoint Permission

Configure the SharePoint Online App Catalog

Azure Function | Sharepoint List item | Call from Power Automate Flow