如何在MVC中为动态列和行创建视图 [英] How to create view in MVC for a dynamically columns and rows
本文介绍了如何在MVC中为动态列和行创建视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个存储的SQL服务器从表中获取动态数据透视图
现在我想在mvc中使用asp.net和MVC4在一个视图中显示这个br />
感谢所有人。
我尝试过的事情:
使用System;
使用System.Collections;
使用System.Collections.Generic;
使用System.Data;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;使用YMOReporting.Models
;
使用System.Data.SqlClient;
namespace YMOReporting.Controllers.Reportings
{
public class Proc1Controller:Controller
{
private YMOReportingConnex db = new YMOReportingConnex();
// GET:Proc1:为动态枢轴存储
public ActionResult Index()
{
return View();
}
public DataTable PivotTableView()
{
db.GetProc1()。ToList();
DataTable dt = new DataTable();
// GetProc1()返回Table的所有数据。
var data = db.GetProc1()。ToList();
//将linq应用于geeting pivot输出
var d =(来自f中的数据
group f by new {f.Planner,f.Vendor_Location,f.Bulk_Material}
进入myGroup
,其中myGroup.Count()> 0
选择新的
{
myGroup.Key.Planner,
myGroup.Key.Vendor_Location,
myGroup.Key.Bulk_Material,
subject = myGroup.GroupBy(f => f.Week)。选择
(m => new {Sub = m.Key,Value = m。 Sum(c => c.Value)})
})。ToList();
var sub = db.GetProc1()。ToList();
//像
一样的独特周//创建用于添加动态列的数组
ArrayList objDataColumn = new ArrayList();
if(data.Count()> 0)
{
//三列修复Planner,Vendor_Location,Bulk_Material。
objDataColumn.Add(Planner);
objDataColumn.Add(Vendor_Location);
objDataColumn.Add(Bulk_Material);
//在数据表
中添加主题名称为(int i = 0; i< sub.Count; i ++)
{
objDataColumn.Add(子[I] .Week);
}
//将动态列名称添加到datatable dt
for(int i = 0; i< objDataColumn.Count; i ++)
{
dt.Columns.Add(objDataColumn [i] .ToString());
}
//关于动态列和动态数据将数据添加到数据表中
for(int i = 0; i< d.Count; i ++)
{
List< string> tempList = new List< string>();
tempList.Add(d [i] .Planner.ToString());
tempList.Add(d [i] .Vendor_Location.ToString());
tempList.Add(d [i] .Bulk_Material.ToString());
var res = d [i] .subject.ToList();
for(int j = 0; j< res.Count; j ++)
{
tempList.Add(res [j] .Value.ToString());
}
dt.Rows.Add(tempList.ToArray< string>());
}
}
return dt;
}
}
}
解决方案
尝试
public ActionResult Index()
{
DataTable dt = PivotTableView( );
return View(dt);
}
@using System.Data
@model DataTable
< table cellpadding =0cellspacing =0>
< tr>
@foreach(Model.Columns中的DataColumn col)
{
< th> @ col.ColumnName< / th>
}
< / tr>
@foreach(Model.Rows中的DataRow行)
{
< tr>
@foreach(Model.Columns中的DataColumn col)
{
< td> @row [col.ColumnName]< / td>
}
< / tr> (b i = 0; i< objDataColumn。伯爵; i ++)
{
dt.Columns.Add(objDataColumn [i] .ToString());
}
for(int i = 0; i< d.Count; i ++)
{
DataRow dr = dt .NewRow();
List< string> tempList = new List< string>();
tempList.Add(d [i] .Planner.ToString());
tempList.Add(d [i] .Vendor_Location.ToString());
tempList.Add(d [i] .Bulk_Material.ToString());
var res = d [i] .subject.ToList();
for(int j = 0; j< res.Count; j ++)
{
tempList.Add(res [j] .Value.ToString());
}
int k = 0;
foreach(临时列表中的var v)
{
dr [k] = v.toString();
k ++;
}
dt.Rows.Add(dr);
// dt.Rows.Add(tempList.ToArray< string>());
}
先生,我很抱歉根据您的代码向您发送将列表转换为数据表的代码。实际上这个过程如下所示:
1- cretate一个模型意味着一个类按照来自列表的字段来计算
我模仿下面的文件
var data = db.GetProc1()。ToList();
var d =(从f中的数据
group f by new {f.Planner,f.Vendor_Location,f.Bulk_Material}
into myGroup
where myGroup.Count()> ; 0
选择新的
{
planner = myGroup.Key.Planner,
location = myGroup.Key.Vendor_Location,
material = myGroup.Key.Bulk_Material,
subject = myGroup.GroupBy(f => f.Week)。选择
(m => new {Sub = m.Key,Value = m.Sum(c => c.Value) })
})。ToList();
这里在项目模型中创建模型类
1-右键点击模型文件夹添加类似下面的课程
公共课程计划
{
public字符串规划器{get;组; }
公共字符串位置{get; set;}
public string material {get; set;}
公共小数主题{get;组; }
}
public ActionResult PivotTableView()
{
var data = db.GetProc1()。ToList();
var d =(从f中的数据
group f by new {f.Planner,f.Vendor_Location,f.Bulk_Material}
into myGroup
where myGroup.Count()> ; 0
选择新的
{
planner = myGroup.Key.Planner,
location = myGroup.Key.Vendor_Location,
material = myGroup.Key.Bulk_Material,
subject = myGroup.GroupBy(f => f.Week)。选择
(m => new {Sub = m.Key,Value = m.Sum(c => c.Value) })
})。ToList();
返回查看(d);
}
查看流程
1 - 右键单击方法PivotTableView
2-单击选项列表中的添加视图选项
3 =勾选复选框创建一个strolnly类型视图
4 - 选择从下拉列表中创建以上作为类的模型
5-点击添加
然后在视图页面中添加他的顶部
< pre> @ model IEnumerable< projectname.Models.classname>
for循环和表格行中的
显示数据
I have a stored sql server to get a dynamic pivot from table
now i want to display this in a view in mvc
i using asp.net and MVC4
thanks for all.
What I have tried:
using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.Mvc; using YMOReporting.Models; using System.Data.SqlClient; namespace YMOReporting.Controllers.Reportings { public class Proc1Controller : Controller { private YMOReportingConnex db = new YMOReportingConnex(); // GET: Proc1 : stored for a dynamic pivot public ActionResult Index() { return View(); } public DataTable PivotTableView() { db.GetProc1().ToList(); DataTable dt = new DataTable(); //GetProc1() return All data for Table. var data = db.GetProc1().ToList(); //Applying linq for geeting pivot output var d = (from f in data group f by new { f.Planner, f.Vendor_Location, f.Bulk_Material } into myGroup where myGroup.Count() > 0 select new { myGroup.Key.Planner, myGroup.Key.Vendor_Location, myGroup.Key.Bulk_Material, subject = myGroup.GroupBy(f => f.Week).Select (m => new { Sub = m.Key, Value = m.Sum(c => c.Value) }) }).ToList(); var sub = db.GetProc1().ToList(); // Distinct Week Like Below //Creating array for adding dynamic columns ArrayList objDataColumn = new ArrayList(); if (data.Count() > 0) { //Three column are fix "Planner","Vendor_Location","Bulk_Material". objDataColumn.Add("Planner"); objDataColumn.Add("Vendor_Location"); objDataColumn.Add("Bulk_Material"); //Add Subject Name as column in Datatable for (int i = 0; i < sub.Count; i++) { objDataColumn.Add(sub[i].Week); } //Add dynamic columns name to datatable dt for (int i = 0; i < objDataColumn.Count; i++) { dt.Columns.Add(objDataColumn[i].ToString()); } //Add data into datatable with respect to dynamic columns and dynamic data for (int i = 0; i < d.Count; i++) { List<string> tempList = new List<string>(); tempList.Add(d[i].Planner.ToString()); tempList.Add(d[i].Vendor_Location.ToString()); tempList.Add(d[i].Bulk_Material.ToString()); var res = d[i].subject.ToList(); for (int j = 0; j < res.Count; j++) { tempList.Add(res[j].Value.ToString()); } dt.Rows.Add(tempList.ToArray<string>()); } } return dt; } } }
解决方案
try
public ActionResult Index() { DataTable dt = PivotTableView(); return View(dt); }
@using System.Data @model DataTable <table cellpadding="0" cellspacing="0"> <tr> @foreach (DataColumn col in Model.Columns) { <th>@col.ColumnName</th> } </tr> @foreach (DataRow row in Model.Rows) { <tr> @foreach (DataColumn col in Model.Columns) { <td>@row[col.ColumnName]</td> } </tr> } </table>
for (int i = 0; i < objDataColumn.Count; i++) { dt.Columns.Add(objDataColumn[i].ToString()); } for (int i = 0; i < d.Count; i++) { DataRow dr = dt.NewRow(); List<string> tempList = new List<string>(); tempList.Add(d[i].Planner.ToString()); tempList.Add(d[i].Vendor_Location.ToString()); tempList.Add(d[i].Bulk_Material.ToString()); var res = d[i].subject.ToList(); for (int j = 0; j < res.Count; j++) { tempList.Add(res[j].Value.ToString()); } int k = 0; foreach(var v in tempList) { dr[k] = v.toString(); k++; } dt.Rows.Add(dr); // dt.Rows.Add(tempList.ToArray<string>()); }
sir I am so sorry to send you the code for converting list to datatable as per your code.Actually the process is given bellow 1- cretate a model means a class as per the fields come from list I modefy that in bellow
var data = db.GetProc1().ToList(); var d = (from f in data group f by new { f.Planner, f.Vendor_Location, f.Bulk_Material } into myGroup where myGroup.Count() > 0 select new { planner = myGroup.Key.Planner, location = myGroup.Key.Vendor_Location, material = myGroup.Key.Bulk_Material, subject = myGroup.GroupBy(f => f.Week).Select (m => new { Sub = m.Key, Value = m.Sum(c => c.Value) }) }).ToList();
here create model class in your project model
1- right click on the model folder add a class like bellow
public class planning { public string planner { get; set; } public string location { get; set;} public string material { get; set;} public decimal subject { get; set; } } public ActionResult PivotTableView() { var data = db.GetProc1().ToList(); var d = (from f in data group f by new { f.Planner, f.Vendor_Location, f.Bulk_Material } into myGroup where myGroup.Count() > 0 select new { planner = myGroup.Key.Planner, location = myGroup.Key.Vendor_Location, material = myGroup.Key.Bulk_Material, subject = myGroup.GroupBy(f => f.Week).Select (m => new { Sub = m.Key, Value = m.Sum(c => c.Value) }) }).ToList(); return View(d); }
Proces for view 1- Right click on the method PivotTableView 2- Click the add view option from the option list 3 = tick the check box create a strolnly-typed view 4-select the model that created above as a class from the the dropdown list 5- click add then in the view page add on he top <pre>@model IEnumerable<projectname.Models.classname>
in the for loop and table row display the data
这篇关于如何在MVC中为动态列和行创建视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文