如何在MVC中为动态列和行创建视图 [英] How to create view in MVC for a dynamically columns and rows

查看:60
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆