1- Create a model CurrentReport.cs
public class CurrentReport
{
public IEnumerable<tablesfield> OTablesFields { get; set; }
public List<dynamic> dataField { get; set; }
}
2- Now, create Actionmethod in controller like
public ActionResult Report(int tableId)
{
ReportUtility OReportUtility = new ReportUtility();
CurrentReport OCurrentReport = new CurrentReport();
OCurrentReport.dataField = OReportUtility.getTableData(tableId);
OCurrentReport.OTablesFields = OReportUtility.getColumns(tableId);
return PartialView(OCurrentReport);
}
3- Then create getTableData() & getColumns() in ReportUtility Class
public List<dynamic> getTableData(int tableId)
{
try
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["NewConnection"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM " + getTableName(tableId), con);
da.SelectCommand = cmd;
da.Fill(dt);
da.Dispose();
con.Close();
var result = new List<dynamic>();
foreach (DataRow row in dt.Rows)
{
var obj = (IDictionary<string,>)new ExpandoObject();
foreach (DataColumn col in dt.Columns)
{
obj.Add(col.ColumnName, row[col.ColumnName]);
}
result.Add(obj);
}
return result;
}
catch (Exception ex)
{
return null;
}
}
public string getTableName(int tableId)
{
var context = new DBEntities();
var tname = (from t in context.Table
where t.Id == tableId
select t.tableName).First();
return tname.ToString();
}
public IEnumerable<tablesfield> getColumns(int tableId)
{
var context = new DBEntities();
var columns = from tf in context.TablesField
where tf.tableId == tableId
select tf;
return columns;
}
4- Now on View
@model WDCS.MODELS.CurrentReport
<div id="PartialPage">
@{
var grid = new WebGrid( Model.dataField , rowsPerPage: 5, canPage: true, canSort: true, ajaxUpdateContainerId: "Grid");
List<webgridcolumn> cols = new List<webgridcolumn>();
foreach (var clm in Model.OTablesFields)
{
cols.Add(grid.Column(clm.fieldName, clm.displayName));
}
}
<div id="Grid">
@grid.GetHtml(
tableStyle:"webGrid",
headerStyle:"header",
alternatingRowStyle:"alt",
columns:cols
)
</div>
</div>
That's it. just provide table id and it display any table data on webgrid.