powered by simpleCommunicator - 2.0.34     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Выввод в гриде данных из n Datatable
11 сообщений из 11, страница 1 из 1
Выввод в гриде данных из n Datatable
    #32244064
Са_ша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи программисты! Как нужно извратиться, что бы в одном гриде одновременно можно было использовать данные из нескольких таблиц? Напимер вместо CustomerID выводился Customer name?
Заранее огромный сенкс!
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32244140
ILYA 39
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык какие проблемы то?
Использовать в качестве источника данных запрос, а не таблицу
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32244150
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странный вопрос (мягко говоря)
может есть новая версия ADO, которая не поддерживает JOIN -ы?
т.е. grid заполняется из dataset, который построен на соответствующей вьюхе или JOIN-инструкции

или я что-то не понял?
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32244269
Айвенго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. У грида не может быть в качестве источника данных несколько таблиц из dataset. Выход только один: написать запрос, который объединяет данные из нескольких таблиц базы данных и заполнить этими данными одну таблицу DataSet... и именно эту так сказать сводную таблицу указать в качестве источника данных для datagrid.

Как объяснить еще проще я не знаю..=)
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32244430
Са_ша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень оригинально........... так-то любой долбоеб сделать может, только вот лишние обращения к серверу зачем, если и без того эти данные в датасет закачены?
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32245069
Айвенго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин!
Если в твоем твоем таблицы связаны RelationShip то ты без проблем можешь сделать Select из этих таблиц!! А потом этот Select указать в качестве источника данных для DataGrid!
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32245297
Са_ша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поподробнее плиз! Что за селект с чем его едят?
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32246125
Айвенго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вот способ...
В базе данных есть две таблицы Persons и Departmentrs.
В Persons содержится ID из табл Departmments. Задача:вытащить Department_Name (d_name) по его ID(d_id)

Заливаем датасет из бд и связываем таблицы ключем.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SqlDataAdapter da1 = new SqlDataAdapter( "Select * from Persons" , SqlConn);
SqlDataAdapter da2 = new SqlDataAdapter( "select * from Departments" , SqlConn);

ds = new DataSet( "myDatSet" );
da1.Fill(ds,  "Pers" );
da2.Fill(ds,  "Dept" );

ForeignKeyConstraint fk = new 
ForeignKeyConstraint( "Pers_Dept" , ds.Tables[ "Dept" ].Columns[ "d_id" ],  ds.Tables[ "Pers" ].Columns[ "d_id" ]);

//Устанавливаем первичный ключ			
ds.Tables[ "Pers" ].Constraints.Add(fk);
ds.Tables[ "Dept" ].PrimaryKey = new DataColumn[]{ds.Tables[ "Dept" ].Columns[ "d_Id" ]}; 

dg.DataSource = ds.Tables[ "Pers" ];
dg.DataBind();


Вот теперь нужно изпользовать событие ItemDataBound

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item )
 {
    Label d_id = (Label)e.Item.FindControl( "d_id" );
    Label d_name = (Label)e.Item.FindControl( "d_name" );
				
    DataRow dr = ds.Tables[ "Dept" ].Rows.Find(d_id.Text);
   d_name.Text =  dr[ "d_name" ].ToString();
  }
}

Ну и на последок код самого грида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<asp:datagrid id= "dg"  runat= "server"  AutoGenerateColumns= "False" >
  <Columns>
     <asp:TemplateColumn HeaderText= "fName" >
	<ItemTemplate>
	   <%# DataBinder.Eval(Container,  "DataItem.fname" ,  "{0 :g}") %>
	</ItemTemplate>
    </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText= "Dept ID" >
     <ItemTemplate>
	<asp:Label id= "d_id"  runat= "server"  Text='<%# DataBinder.Eval    (Container, "DataItem.d_id", "{0:g}") %>'></asp:Label>
     </ItemTemplate>
     </asp:TemplateColumn>
  <asp:TemplateColumn HeaderText= "Name" >
    <ItemTemplate>
	<asp:Label id= "d_name"  runat= "server" ></asp:Label>
   </ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>


Если чего непонятно...
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32246288
Айвенго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще способ... С использование того же ItemDataBound и метода SELECT.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item )
 {
    Label d_id = (Label)e.Item.FindControl( "d_id" );
    Label d_name = (Label)e.Item.FindControl( "d_name" );

  DataRow[] dr = ds.Tables[ [b]"Dept" ].Select( "d_id = " +d_id.Text,  "d_id" );[/b]
     d_name.Text = dr[ 0 ][ "d_name" ].ToString();
				
  }
}



...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32248444
Фотография progist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот способ:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private dataSetOrders As New DataSet()

Private Sub FillGrid()

        Dim OrdersDataTable As New DataTable()
        Dim OrderDetailsDataTable As New DataTable()

        'создаем DataTable и добавляем ее к Dataset

        DAOrders.Fill(OrdersDataTable)
        OrdersDataTable.TableName = "Orders"
        dataSetOrders.Tables.Add(OrdersDataTable)

        DAOrderDetails.Fill(OrderDetailsDataTable)
        OrderDetailsDataTable.TableName = "OrderDetails"
        dataSetOrders.Tables.Add(OrderDetailsDataTable)
        'таблицы заполнены и добавлены к датасету
        'создаем связи
        Dim relOrder As New DataRelation("Orders", OrdersDataTable.Columns("OrderID"), OrderDetailsDataTable.Columns("OrderID"))
        dataSetOrders.Relations.Add(relOrder)
        ' привязываем DataSet к гриду
        Grid1.DataSource = dataSetOrders
    End Sub


теперь такой вопрос:
1. если мы будем обрабатывать таблицы в датасете - должны ли мы
загружать на клиента много таблиц и много записей?
2. должны ли мы переносить бизнес-логику на клиента?
...
Рейтинг: 0 / 0
Выввод в гриде данных из n Datatable
    #32249105
Айвенго
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TO progist
Код: plaintext
1.
2.
 1 . если мы будем обрабатывать таблицы в датасете - должны ли мы 
загружать на клиента много таблиц и много записей? 


Теоретически, в датасет нужно заливать только необходимые данные,
так как избыточность может привести к тормозам. Для этого нужно в запросах к базе использовать оператор where и проч.=) Но учитывая мощности современных серверов, на избыточноть можно наплевать =)

Выборка из двух и более таблиц быстрее будет работать на Sql Servere.
Но с другой стороны, датасет можно закешировать, сохранить на винчестер и проч, что может избавить от лишних обращений к SQL Server'у . Так что нельзя сказать что именно правильнее: заливать таблицы датасета a потом делать выборки или сразу тощить нужные наборы данных с SqlServera. Нужно смотреть по ситуации


Код: plaintext
1.
 2 . должны ли мы переносить бизнес-логику на клиента?


В некоторых случаях перенос логики на клиента повысит производительность
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Выввод в гриде данных из n Datatable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]