Elvally Boubacar Ответов: 3

Как создать представление в MVC для динамических столбцов и строк


У меня есть сохраненный sql сервер для получения динамической сводки из таблицы
теперь я хочу отобразить это в представлении в mvc
я использую asp.net и MVC4
спасибо за все.

Что я уже пробовал:

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;

        }

    }
}

		    
                    

3 Ответов

Рейтинг:
6

Laxmidhar tatwa technologies

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();


здесь создайте класс модели в вашей модели проекта

1 - Щелкните правой кнопкой мыши на папке модели добавить класс, как показано ниже
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>


в цикле for и строке таблицы отображаются данные


Elvally Boubacar

большое спасибо сэр

Elvally Boubacar

Итак сэр но у меня есть еще один вопрос:
я хочу вычислить сумму всех столбцов и всех строк, как я могу продолжить ?? благодарим

Laxmidhar tatwa technologies

сэр
Я имею в виду, что вы хотите считать по строкам, а также по кумам

Elvally Boubacar

мне нужна сумма всех данных в каждом столбце и каждой строке

Laxmidhar tatwa technologies

сэр
есть одно числовое поле другие текстовые поля возможно

Elvally Boubacar

Да, сэр, у меня есть несколько колонок с текстом, что я могу сделать ? сэр спасибо

Laxmidhar tatwa technologies

рассчитывать можно только на текстовые поля . Но числовые поля могут суммироваться

Рейтинг:
1

Karthik_Mahalingam

пробовать

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>


Elvally Boubacar

Привет спасибо сэр за ваше предложение, но мой сохраненный возврат null (it return : NullReferenceException), так что я не могу показать результат в моем представлении

Karthik_Mahalingam

в какой строке вы получаете ошибку. код представления sholuldnt, так как мы не обращались ни к одному свойству, которое приводит к нулевой ошибке ссылки.

Elvally Boubacar

в первом foreach точно в модели.Столбцы

Karthik_Mahalingam

является ли модель нулевой ?

Elvally Boubacar

модель предназначена для динамической сводной таблицы. в нижеследующем

пространство имен YMOReporting.Модели
{
использование системы;
использование системы.Коллекции.Общий;
использование System.Data;

общественный разделяемого класса Proc1_Result
{
public string Planner { get; set; }
публичная строка Vendor_Location { get; set; }
публичная строка Bulk_Material { get; set; }
общественного значения null&ЛТ;двойной&ГТ; значение { получить; набор; }
public string Week { get; set; }
}
}

Karthik_Mahalingam

можете ли вы показать скриншот того, как появляются ваши данные?
вы используете datatable или Class в качестве модели ?

Elvally Boubacar

да я использую datatable
мой взгляд должен вернуть что-то как

https://drive.google.com/file/d/1dxpXch3LaM3ArKyAX-FpfGsN9WyWwPhX/view?usp=sharing

Karthik_Mahalingam

Образ-это датируемый обряд?

Elvally Boubacar

я положил его на google Диск

Karthik_Mahalingam

да видел этот образ, он есть в датируемом обряде?
post datatable data вы делаете какое-то форматирование?

Elvally Boubacar

это мои исходные данные, которые мне нужны. https://drive.google.com/file/d/1NM6ZvPfTN96oHicEnI26zEU9clrRwfai/view?usp=sharing

Karthik_Mahalingam

как применяется pivot?
ваш вопрос заключается в применении сводной или динамической таблицы в представлении?

Elvally Boubacar

мой вопрос:
у меня есть таблица с динамическим столбцом (неделя), и я хочу отобразить ее, динамически поворачивая этот столбец в представлении mvc

Karthik_Mahalingam

как ты поворачиваешься?
c# или javascript ?

Elvally Boubacar

с#

Karthik_Mahalingam

проверить это Сводная Таблица C# [^]

Elvally Boubacar

я могу, используя динамический объект DataTable на вид с помощью foreach, чтобы получить этот стержень?

Karthik_Mahalingam

вот как вы должны поступить
потому что динамические вещи не могут быть обработаны должным образом с помощью сущности класса

Elvally Boubacar

спасибо за ваш повтор
теперь я спрашиваю, как я могу развеять это на виду

Рейтинг:
0

Laxmidhar tatwa technologies

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>());
                } 


Elvally Boubacar

Извините а есть время
так что я не понимаю как я могу это использовать не могли бы вы объяснить подробнее пожалуйста