2015-10-26 5 views
0

У меня есть следующий код для извлечения данных из таблицы sql. Этот код извлекает только последнюю запись. Я хочу показать все данные в таблице.получить данные из таблицы sql, чтобы они выглядели как сетки

using (SqlConnection con = new SqlConnection(CS)) 
     { 
      SqlCommand cmd = new SqlCommand("select auction_number, auction_title from Auctions", con); 
      con.Open(); 

      SqlDataReader myReader = cmd.ExecuteReader(); 
      while (myReader.Read()) 
      { 
       Label1.Text = (myReader["auction_number"].ToString()); 
       Label2.Text = (myReader["auction_title"].ToString()); 
      } 
     } 

Я хочу, чтобы данные выглядели на следующем рисунке. enter image description here

Следует ли использовать столы ?! Divs ?! или это возможно с помощью GridViews?

+0

вы можете показать мне пример? – Barlet

+0

Используйте DataAdapter (не DataReader) и помещены в DataGridView.DataSource = dt. См. Веб-страницу https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter(v=vs.110).aspx. Используйте DataTable вместо DataSet. – jdweng

+0

Голосование, чтобы закрыть как слишком широкий - вам нужен элемент управления, который показывает несколько «строк» ​​('DataGrid',' Repeater' и т. Д.), И вам необходимо привязать его к источнику данных (вы можете использовать либо DataReader, либо 'DataSet'). Там есть много учебников по любой проблеме. –

ответ

0

здесь один подход с asp:Repeater в сочетании с <div>

ASPX:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="edsList"> 
<ItemTemplate> 
<div> 
<asp:Label ID="Label1" runat="server" Text='<%#Eval("auction_number") %>'></asp:Label> 
<asp:Label ID="Label2" runat="server" Text='<%#Eval("auction_title") %>'></asp:Label> 
</div> 
</ItemTemplate> 
</asp:Repeater> 

CS:

string query = "select auction_number, auction_title from Auctions"; 
using (SqlConnection myConnection = new SqlConnection(ConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(query, myConnection)) 
    { 
     myConnection.Open(); 
     SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
     DataTable dt = new DataTable(); 
     dt.Load(dr); 

     Repeater1.DataSource = dt; 
     Repeater1.DataBind(); 
    } 
} 
+0

Большое спасибо ... – Barlet

0

Ваш текущий SQL выбирает два поля для каждой строки в таблице.

Вы можете изменить свой C#, чтобы отобразить это как 3 пары в строке, как ответ Барлета.

ИЛИ вы можете изменить свой SQL, чтобы вернуть данные «в форме», как вы хотите. Вот как это сделать:

select max(case when rn % 3 = 0 then auction_number else 0 end) as an1, 
     max(case when rn % 3 = 0 then auction_title else '' end) as at1, 
     max(case when rn % 3 = 1 then auction_number else 0 end) as an2, 
     max(case when rn % 3 = 1 then auction_title else '' end) as at2, 
     max(case when rn % 3 = 2 then auction_number else 0 end) as an3, 
     max(case when rn % 3 = 2 then auction_title else '' end) as at3 
from (select auction_number, auction_title, ROW_NUMBER() OVER() AS rn 
     from Auctions) sub 
group by trunc(rn/3) 

Вероятно, лучше сделать это в C# - но это может быть сделано в SQL