|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Есть DataSet. В нем несколько таблиц. Надо в одном DataGrid(ASP.NET) показать что-то типа T-SQL view, т.е. неск-ко колонок из одной таблицы, неск-ко из родительской. Как это лучше всего сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2004, 17:19 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Нужно использовать свойство Expression у столбца DataColumn таблицы DataTable. Для этого в датасете должны быть определены отношения между таблицами. Например, Parent.Price даст значение столбца Price у родительской таблицы, а Sum(Child.Price) - сумму цен из дочерней таблицы. Если отношений несколько, используется название отношения: Avg(Child(Customers2Orders).Quantity) Либо сформировать результат в базе данных ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2004, 18:27 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
в DataGrid: <asp:TemplateColumn HeaderText="Rights"> <HeaderStyle CssClass="corpblue"></HeaderStyle> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Rights") %>'> </asp:Label> </ItemTemplate> </asp:TemplateColumn> Что мне писать вместо DataItem.Rights, чтобы обратиться к родительской таблице Office и полю в ней OfficeName? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 13:31 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Так нельзя. DataGrid использует свойство таблицы DefaultView, а там ссылки на другие таблицы недопустимы. Можно написать обработчик OnItemDataBound и присваивать значение метке самостоятельно. Еще один вариант - работать не с таблицами, а с бизнес-объектами. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 14:18 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Хорошо. допустим, есть у меня в одном датасете Order и Customer. Правильно я понимаю, что надо будет завести еще одну таблицу в том же датасете - OrderCustomer для показа одновременно данных по заказу и по покупателю этого заказа в одной строке? И как оптимальнее такую таблицу заполнять, если обходиться без использования SQL вообще - работа ведется только с отсоединенными данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 15:08 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Создание еще одной таблицы приведет к дублированию данных. Я бы добавил вычисляемый столбец: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 16:43 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Да, но Dataset у меня генереный визардом(и его XSD может меняться). Как можно в таком случае поступить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 17:27 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Можно создать свой датасет, наследующий сгенерированному и в его конструкторе добалвять столбцы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 17:48 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Да, но Dataset у меня генереный визардом(и его XSD может меняться). Как можно в таком случае поступить? Expression column можно добавить и в XSD Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2004, 21:17 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Добавил я колонку в DataTable. ВОт какой XSD получается: <?xml version="1.0" encoding="utf-8" ?> <xs:schema id="DataSetOffices" targetNamespace="http://tempuri.org/DataSetOffices.xsd" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns="http://tempuri.org/DataSetOffices.xsd" xmlns:mstns="http://tempuri.org/DataSetOffices.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="DataSetOffices" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Office" msdata:Locale="ru-RU"> <xs:complexType> <xs:sequence> <xs:element name="ObjectID" type="xs:int" minOccurs="0" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="1" /> <xs:element name="OfficeName" type="xs:string" minOccurs="0" /> <xs:element name="OfficeCode" type="xs:string" minOccurs="0" /> <xs:element name="OfficeLogin" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="OfficePassword" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="AgentNetwork" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="Phone" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="EMail" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="ExtraInfo" type="xs:string" minOccurs="0" nillable="true" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="User" msdata:Locale="ru-RU"> <xs:complexType> <xs:sequence> <xs:element name="ObjectID" type="xs:ID" minOccurs="0" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="1" /> <xs:element name="Login" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="Password" type="xs:string" minOccurs="0" /> <xs:element name="Rights" type="xs:int" minOccurs="0" /> <xs:element name="LostPacketListStyle" type="xs:int" minOccurs="0" nillable="true" /> <xs:element name="ReportsStyle" type="xs:int" minOccurs="0" nillable="true" /> <xs:element name="EMail" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="Phone" type="xs:string" minOccurs="0" /> <xs:element name="Web" type="xs:string" minOccurs="0" /> <xs:element name="ExtraInfo" type="xs:string" minOccurs="0" nillable="true" /> <xs:element name="OfficeID" type="xs:int" minOccurs="0" /> <xs:element name="UserOfficeName" type="xs:string" minOccurs="0" msdata:Expression="Parent.OfficeName" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:key name="DataSetOfficesKey1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:Office" /> <xs:field xpath="mstns:ObjectID" /> </xs:key> <xs:key name="DataSetOfficesKey2" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:User" /> <xs:field xpath="mstns:ObjectID" /> </xs:key> <xs:keyref name="OfficeUser" refer="DataSetOfficesKey1" msdata:ConstraintName="OfficeUser"> <xs:selector xpath=".//mstns:User" /> <xs:field xpath="mstns:OfficeID" /> </xs:keyref> <xs:key name="DataSetOfficesKey3"> <xs:selector xpath=".//mstns:Office" /> <xs:field xpath="mstns:OfficeCode" /> </xs:key> </xs:element> </xs:schema> Связал ее с гридом: <asp:TemplateColumn HeaderText="UserOfficeName"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.UserOfficeName") %>'> </asp:Label> </ItemTemplate> </asp:TemplateColumn> Обе таблицы непустые на момент вызова DataGrid1.DataBind(). Но показаться успевают, только те, кто идет в гриде до этой самой "UserOfficeName". На ней ловится такой eхception: "DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name UserOfficeName." Как это лечить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 07:34 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
В winforms все должно работать. Как советовал Ustazz не пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 08:22 |
|
Как в DataGrid показать данные, собранные из разных DataTable?
|
|||
---|---|---|---|
#18+
Все нормально проходит, спасибо за совет. Грабли тут в другом - dataset получается по remoting-у, а он почему-то срезает при передаче вычисляемые колонки из датасета (((((((( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2004, 19:25 |
|
|
start [/forum/topic.php?fid=17&fpage=127&tid=1354071]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
69ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 240ms |
0 / 0 |