2016-06-10 2 views
1

Мне трудно получить результаты DataRow для отображения в таблице на частичном представлении. В основном то, что я пытаюсь сделать, это передать результаты SQL-запроса частичному представлению и отобразить результаты в таблице. Обратите внимание, что результаты будут меняться каждый раз, поэтому я не могу жестко закодировать имена столбцов, они должны быть динамически созданы моим кодом.Отображение результатов DataRow в таблице

Это мое действие контроллера, его цель - запустить sql-запрос и передать результаты в частичное представление. Обратите внимание, что строка соединения была удалена из кода, так как она содержит имя пользователя и пароль, но она присутствует и работает над моим кодом. Также обратите внимание, что я отлаживал это, и список, который я возвращаю, имеет данные, которые я ожидал от него.

List<DataRow> list = null; 

string connString = "Connection String Goes Here"; 
using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    using (SqlCommand objCommand = new SqlCommand(custSQL, conn)) 
    { 
     objCommand.CommandType = CommandType.Text; 
     DataTable dt = new DataTable(); 
     SqlDataAdapter adp = new SqlDataAdapter(objCommand); 
     conn.Open(); 
     adp.Fill(dt); 

     if (dt != null) 
     { 
      list = dt.AsEnumerable().ToList(); 
     } 
    } 
} 

return PartialView("_CustomSQL", list); 

Это мнение, Обратите внимание, я получаю красные ошибки линии под DataRow и DataColumn я только написал этот код, чтобы лучше проиллюстрировать то, что я пытаюсь достичь, который предназначен для отображения результатов моего SQL запроса в HTML стиль таблица:

@model System.Collections.Generic.List<System.Data.DataRow> 

<table> 
    <thead> 
     <tr> 
      @foreach (DataColumn col in Model.Columns) 
      { 
       <th>@col.ColumnName</th> 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (DataRow row in Model.Rows) 
     { 
      <tr> 
       @foreach (DataColumn col in Model.Columns) 
       { 
        <td>@row[col.ColumnName]</td> 
       } 
      </tr> 
     } 
    </tbody> 
</table> 
+0

Было бы лучше использовать для ViewModel вместо вашего просмотра списка DataRows. Я бы создал ViewModel, который отражает то, что ваш взгляд должен отображать. В своем контроллере получите значения из своего дБ, заселите ViewModel и передайте их в свое представление. – nick

ответ

1

Вы пропускание "List" в качестве модели, так что ваш взгляд должна быть Еогеаспом для каждого DataRow:

@model System.Collections.Generic.List<System.Data.DataRow> 

<table> 
    <thead> 
     <tr> 
      @foreach (System.Data.DataRow row in Model) 
      { 
       foreach(System.Data.DataColumn col in row.Columns) 
       { 
        <th>@col.ColumnName</th> 
       } 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (System.Data.DataRow row in Model) 
     { 
      <tr> 
      @foreach (DataColumn col in Model.Columns) 
      { 
       <td>@row[col.ColumnName]</td> 
      } 
      </tr> 
     } 
    </tbody> 
</table> 
+0

Я получаю красные ошибки линии под DataColumn и Model.Columns, я помещал их, чтобы лучше проиллюстрировать то, что я пытаюсь сделать. –

+0

Он по-прежнему дает ошибки в DataRow и DataColumn, я пропустил инструкцию using? –

+0

Две вещи 'DataRow' не содержат определения для' Columns'. И во втором 'foreach',' col' не существует –

1

Пропустите DataTable:

return PartialView("_CustomSQL", dt); // dt would be out of scope in your code and you'll manage that 

А на ваш взгляд:

@model System.Data.DataTable 
@using System.Data 

<table> 
    <thead> 
     <tr> 
      @foreach (DataColumn col in Model.Columns) 
      { 
       <th>@col.ColumnName</th> 
      } 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (DataRow row in Model.Rows) 
     { 
      <tr> 
       @foreach (DataColumn col in Model.Columns) 
       { 
        <td>@row[col.ColumnName]</td> 
       } 
      </tr> 
     } 
    </tbody> 

+0

Используя ваш код, мне удалось отобразить заголовки таблиц, но я не могу получить данные таблицы для отображения, у вас есть « @row [col.ColumnName] «должно ли это быть чем-то вроде ColumnData? –

+0

@ CathalO'Donnell Да, он получил значение столбца в текущей строке. Может применяться 'ToString()'. ' @row [col.ColumnName] .ToString()' –

+1

@ CathalO'Donnell В качестве побочного примечания вам действительно нужно рассмотреть возможность использования режимов просмотра. –

Смежные вопросы