Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > DataList - преобразование объектов данных в DataSet?


Автор: Exception 31.12.2005, 03:28
Пишу я сайт с БД. Библиотеку, работающую с БД, сделал и стал верстать странички. Возник соблазн заюзать DataList со смарт-тегами. Да вот есть проблема. Мой dbLevel возвращает все в виде объектов данных (моих собственных), а DataList просит датасета. Итак, есть два выхода:
1. Заставить dbLevel возвращать датасет.
2. Преобразовывать в коде страницы массив Item'ов в датасет.
Хотелось бы второе, только как это осуществить? Есть ли что-то типа DataSetSerializer? Или надо перегонять в XML, а из него в DS? Как?

Автор: mr.DUDA 31.12.2005, 11:36
Цитата(Exception @ 31.12.2005, 02:28)
Или надо перегонять в XML, а из него в DS? Как?

Можно попробовать сериализовать в XML свой объект и на основе этого XML создать XSD-схему, по которой в свою очередь - типизированный датасет.

Автор: Exception 31.12.2005, 12:36
А как это выглядит в коде? Я в XSD ни бум-бум smile Это надо в дизайн-тайме создавать? Или прямо в рантайме? Предположим, есть класс Item
Код
Public Class Item
Private _name As String, _id As Guid
Public Property Name
Get
Return _name
End Get
Set(value As String)
_name = value
End Set
End Property
'то же с Id

. Как его перегнать в DS? Хотелось бы примерчик кода smile
Добавлено @ 12:38
Всмысле не его, а их массив smile

Автор: mr.DUDA 31.12.2005, 15:52
XSD-схема удобна тем, что по ней можно создать типизированный датасет, но я посмотрел - можно решить твою задачу и без схемы. Вот пример (вместо Item у меня Order, типа заказ):
Код
using System;
using System.Data;
using System.IO;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Order
{
    public string address;
    public int amount;
    public Order(string address, int amount)
    {
        this.address = address;
        this.amount = amount;
    }
    protected Order() { } // для десериализации
}

class TestApp
{
    static void Main(string[] args)
    {
        Order[] orders = 
        {
            new Order("order1 addr", 10),
            new Order("order2 addr", 20),
            new Order("order3 addr", 30),
        };

        // сериализация в XML
        XmlSerializer ser = new XmlSerializer(typeof(Order[]));
        MemoryStream stream = new MemoryStream();
        ser.Serialize(stream, orders);
        stream.Seek(0, SeekOrigin.Begin);

        // зачитка XML в датасет
        DataSet ds = new DataSet();
        ds.ReadXml(stream);

        // пробежимся по всем таблицам, строкам и колонкам датасета
        foreach(DataTable tb in ds.Tables)
        {
            Console.WriteLine("Table {0} rows:", tb.TableName);
            foreach(DataRow row in tb.Rows)
            {
                Console.WriteLine();
                foreach(DataColumn col in tb.Columns)
                    Console.Write("{0}:{1}; ", col.ColumnName, row[col]);
            }
        }

    }
}

Добавлено @ 15:55
З.Ы. когда переименовался ? smile

Автор: Exception 31.12.2005, 15:58
Цитата(mr @ 31.12.2005, 16:52)
XSD-схема удобна тем, что по ней можно создать типизированный датасет

Да он тут мне и не нужен smile
Цитата(mr @ 31.12.2005, 16:52)
Вот пример

Спасибо, идею понял. +1 smile
Добавлено @ 16:00
Цитата(mr @ 31.12.2005, 16:52)
когда переименовался ?

Вчера smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)