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

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

Как объяснить еще проще я не знаю..=)
...
Рейтинг: 0 / 0
22.08.2003, 12:18
    #32244430
Са_ша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Очень оригинально........... так-то любой долбоеб сделать может, только вот лишние обращения к серверу зачем, если и без того эти данные в датасет закачены?
...
Рейтинг: 0 / 0
22.08.2003, 16:58
    #32245069
Айвенго
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Вот блин!
Если в твоем твоем таблицы связаны RelationShip то ты без проблем можешь сделать Select из этих таблиц!! А потом этот Select указать в качестве источника данных для DataGrid!
...
Рейтинг: 0 / 0
22.08.2003, 22:22
    #32245297
Са_ша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Поподробнее плиз! Что за селект с чем его едят?
...
Рейтинг: 0 / 0
25.08.2003, 13:21
    #32246125
Айвенго
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Такой вот способ...
В базе данных есть две таблицы 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
25.08.2003, 14:33
    #32246288
Айвенго
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Вот еще способ... С использование того же 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
27.08.2003, 09:33
    #32248444
progist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
Вот способ:

Код: 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
27.08.2003, 16:34
    #32249105
Айвенго
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выввод в гриде данных из n Datatable
TO progist
Код: plaintext
1.
2.
 1 . если мы будем обрабатывать таблицы в датасете - должны ли мы 
загружать на клиента много таблиц и много записей? 


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

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


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


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


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