2014-11-22 2 views
1

я следующий код в моем классе DATAACCESS:Как отображать результаты, возвращаемые DataTable?

public IEnumerable<Object> getAllPersons() 
    { 
     string CommandText = "Select * from Person"; 
     SqlCommand oCommand = new SqlCommand(CommandText, oConnection); 
     oCommand.CommandType = CommandType.Text; 

     // Create a datatable and SqlDataAdapter 
     SqlDataAdapter oAdapter = new SqlDataAdapter(); 
     oAdapter.SelectCommand = oCommand; 
     DataTable oDataTable = new DataTable(); 
     try 
     { 
      // Open Connection and fill the datatable using the SqlDataAdapter 
      oConnection.Open(); 
      oAdapter.Fill(oDataTable); 
      return oDataTable.AsEnumerable(); 
     } 
     catch (Exception oException) 
     { 
      throw oException; 
     } 
     finally 
     { 
      // Close the SqlConnection 
      oConnection.Close(); 
     } 
    } 

В моем представлении слоя, мне нужно, чтобы связать это возвращается DataTable в моей сетке, вот мой код:

 DataAccess mydataaccess = new DataAccess(); 
     IEnumerable<object> personList=mydataaccess .getAllPersons(); 

     GridView1.DataSource = personList; 
     GridView1.DataBind(); 

Это приводит к следующим :

enter image description here

Как я могу отобразить фактические данные столбцов и результат Da taTable?

+0

Как вам удалось скомпилировать этот код? – Steve

+0

Что это значит? – user3340627

+1

@Steve, я думаю, я понял, что вы имеете в виду, в моем коде есть недостающий раздел, пожалуйста, проверьте отредактированный код – user3340627

ответ

0

Связывание IEnumerable<object> с DataSource из вашей сетки не удается.
Вам необходимо преобразовать вашу последовательность DataRow в объект, который может быть назначен свойству DataSource.

Вы можете изменить метод GetPerson вернуть IEnumerble<DataRow> вместо родового объекта

public IEnumerable<DataRow> getAllPersons() 

и переплета вызова

DataAccess mydataaccess = new DataAccess(); 
IEnumerable<DataRow> personList=mydataaccess .getAllPersons(); 

GridView1.DataSource = personList.CopyToDataTable(); 
GridView1.DataBind(); 

Но в этот момент мне интересно, почему вы не вернуть непосредственно DataTable из вашего метода getAllPersons

0

Измените ваш код следующим образом. Вы можете более легко привязать к DataTable вместо IEnumerable.

public DataTable getAllPersons() 
{ 
    string CommandText = "Select * from Person"; 
    SqlCommand oCommand = new SqlCommand(CommandText, oConnection); 
    oCommand.CommandType = CommandType.Text; 

    // Create a datatable and SqlDataAdapter 
    SqlDataAdapter oAdapter = new SqlDataAdapter(); 
    oAdapter.SelectCommand = oCommand; 
    DataTable oDataTable = new DataTable(); 
    try 
    { 
     // Open Connection and fill the datatable using the SqlDataAdapter 
     oConnection.Open(); 
     oAdapter.Fill(oDataTable); 
    } 
    catch (Exception oException) 
    { 
     throw oException; 
    } 
    finally 
    { 
     // Close the SqlConnection 
     oConnection.Close(); 
    } 
    return oDataTable; 
} 

В вашем файле aspx добавить следующее свойство.

<asp:GridView ID="GridView1" Runat="server" AutoGenerateColumns="true" /> 

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

<asp:GridView ID="productGridView" Runat="server" 
     <Columns> 
      <asp:BoundField HeaderText="Colum Name A" DataField="ColumNameA"> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="Colum Name B" DataField="ColumNameB"> 
      </asp:BoundField> 
     </Columns> 
</asp:GridView> 
+0

Я получил это в своей aspx, но это не помогает – user3340627

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