Змінюй хід війни! Допомагай ЗСУ!

C#. Построение и сохранение таблиц

🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #21
ответ прост, код лучше писать хорошо, чтобы потом не пришлось переделывать, а на случай если бы и пришлось, то чтобы это было просто
Ну что есть хороший код? Который правильно работает, исключая непредвиденные ситуации? или который легко читается? Я спрашивал про концептуальные недостатки описанного мною решения.

И сразу вопрос по DataSet: а разве можно просто так кинуть в него набор данных? Мне показалось, что он работает только непосредственно с базой данных..

Откуда ещё, кроме DataSet можно экспортировать данные в XML?
 
Останнє редагування:
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #22
Ну что есть хороший код? Который правильно работает, исключая непредвиденные ситуации? или который легко читается?

хороший это тот который правильно работает, не вызывает вопросов, легко читается и легко поддается расширению функционала.
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #23
А если, к примеру, двумерный массив строк при помощи XmlSerializer запихнуть в XML файл, то из него можно будет получить HTML при помощи XSL?
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #24
И сразу вопрос по DataSet: а разве можно просто так кинуть в него набор данных? Мне показалось, что он работает только непосредственно с базой данных..

датасет - это набор табличек с данными, можешь в нем хранить таблицы, связи между ними, ограничения. А куда данные из датасета сохранять/загружать неважно. Можешь в БД, можешь в XML, можешь в свой бинарный файл.
А вообще для работы с БД датасет не удобен по соображениям скорости.
Да и XML имхо приятней через XmlDocument генерить. Но порой удобно использовать для этого датасет.

Откуда ещё, кроме DataSet можно экспортировать данные в XML?

откуда угодно, создаешь XmlDocument и пишешь в него все что нужно


А если, к примеру, двумерный массив строк при помощи XmlSerializer запихнуть в XML файл, то из него можно будет получить HTML при помощи XSL?

можно, но XmlSerializer не очень хорошая штука, т.к. генерит в рантайме сборки для сериализации указанного типа, для больших объектов это может занять приличное время...
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #25
можно, но XmlSerializer не очень хорошая штука, т.к. генерит в рантайме сборки для сериализации указанного типа, для больших объектов это может занять приличное время...
Ну таблицы не сильно большие.. Максимум есть одна 3х20, остальные меньше.. Ладно, попробую, может быть что-нибудь и получится... Спасибо за помощь
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #26
Klez, насчет того, что датасеты небыстрые - не согласен! по сравнению с некоторыми другими методами работы с бд - очень даже быстрый!
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #27
вот тебе пример набросал для массива стрингов:
Код:
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.Serialization;

class Program
{
    static void Main()
    {
        string[] sdata = new string[] { "hello", "world" };

        XmlDocument xml = getXml(sdata);
        XslTransform transform = new XslTransform();
        transform.Load("html.xsl");
        using (StreamWriter writer = new StreamWriter("test.html", false, Encoding.UTF8))
            transform.Transform(xml, new XsltArgumentList(), writer);
    }

    private static XmlDocument getXml(string[] sdata)
    {
        XmlDocument xml = new XmlDocument();
        using (StringWriter writer = new StringWriter())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(string[]));
            serializer.Serialize(writer, sdata);
            xml.LoadXml(writer.ToString());
        }
        return xml;
    }
}

тут getXml вернет такой xml:
Код:
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString>
	<string>hello</string>
	<string>world</string>
</ArrayOfString>

для преобразования в HTML используем такой шаблон html.xsl:
Код:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="no" method="xml" media-type="text/xml" omit-xml-declaration="no" version="1.0" encoding="utf-8"/>

	<xsl:template match="/">
		<html>
			<head>
				<META http-equiv="Content-Type" content="text/html; charset=utf-8"/>
			</head>
			<body>
				<xsl:apply-templates />
			</body>
		</html>
	</xsl:template>

	<xsl:template match="ArrayOfString">
		<table valign="top" width="200pt" border="1" cellspacing="0" cellpadding="0">
			<thead>
				<tr valign="top" align="center">
					<td height="100%" style="background-color: #e0e0c0">
						<xsl:text>Value</xsl:text>
					</td>
				</tr>
			</thead>
			<tbody>
				<xsl:apply-templates select="./*[name()='string'] " />
			</tbody>
		</table>
	</xsl:template>

	<xsl:template match="string">
		<tr valign="top">
			<td align="left" style="background-color: #e0e0f0">
				<xsl:value-of select="."/>
			</td>
		</tr>
	</xsl:template>
</xsl:stylesheet>

в результате получим html с табличкой, содержащей значения массива строк

Klez, насчет того, что датасеты небыстрые - не согласен! по сравнению с некоторыми другими методами работы с бд - очень даже быстрый!

:іржач:
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #28
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #29
AposTol, если таблица тебе нужна только для отображения данных и для печати, юзай ReportViewer контрол.
Нарисуешь в дизайнере темплейт. В рантайме проставляешь ReportViewer'у этот темплейт, задаешь DataTable из которой читать данные и вуаля - твой отчет готов. На печать отправляется нажатием одной кнопки мышки в готовом контроле.
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #30
AposTol, если таблица тебе нужна только для отображения данных и для печати, юзай ReportViewer контрол.
Нарисуешь в дизайнере темплейт. В рантайме проставляешь ReportViewer'у этот темплейт, задаешь DataTable из которой читать данные и вуаля - твой отчет готов. На печать отправляется нажатием одной кнопки мышки в готовом контроле.
Если эти данные и будут печататься, то уж точно не из программы.. В эту сторону я смотрел уже - совсем не то, что нужно
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #31
Ну если не из программы, то может и не подходит.
А так - для отображения отчетов - идеальный вариант, сам его сколько юзал.

PS - а че ты топик тут запостил, а не на rsdn ?
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #32
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #33
А на rsdn больше ца.
Правда, я на rsdn почти не постил. Хватало и поиска.
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #34
Klez, дошли руки - поразбирался я с твоим примером. Только вот есть пока две проблемы с этим:
1. При использовании двумерного массива строится не таблица с двумя столбцами, а две таблицы по одному столбцу одна над другой
2. Как программно изменить текст заголовка с Value на какой-нибудь другой, либо вообще убрать шапку?

Во вложении наглядно то, что получается
 

Вкладення

  • Таблица.JPG
    Таблица.JPG
    13.4 КБ · Перегляди: 97
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #35
А чем не устраивает DataGridView? Этот компонент позволяет крутить данными, помещёнными в него как вам хочется. Если вы работаете с базой данных - примените LINQ to SQL. Технология позволяет в GUI отображать базюку, и связи между таблицами. (Технология поддерживает практически все базы данных). Сохранить таблицу можно средствами XML - это очень удобно. Переконвертировать её в другие форматы тоже не составит труда, так как форматирование документа практически любого популярного редактора идёт средствами XML
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #36
Apostol,
тебе нужно добавить еще ячейки для второй колонки, как в header'е, так и в body
т.е. к:
Код:
<td height="100%" style="background-color: #e0e0c0">
    <xsl:text>Value</xsl:text>
</td>

добавить еще:
Код:
<td height="100%" style="background-color: #e0e0c0">
    <xsl:text>Name</xsl:text>
</td>

там, кстати, вместо Name/Value можешь написать что угодно
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #37
Только вот есть пока две проблемы с этим:
1. При использовании двумерного массива строится не таблица с двумя столбцами, а две таблицы по одному столбцу одна над другой

что-то неясно что за "двумерный массив" ты подразумеваешь? :confused: Приведи пример XML ;)

2. Как программно изменить текст заголовка с Value на какой-нибудь другой, либо вообще убрать шапку?

добавь в XML еще один элемент, в него будешь записывать текст заголовка, а из XSL в заголовок содержимое этого элемента вставишь...

Технология позволяет в GUI отображать базюку, и связи между таблицами.

может технология и позволяет, но человеку нужна не технология, а табличка в файле и на принтере :)
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #38
что-то неясно что за "двумерный массив" ты подразумеваешь? Приведи пример XML
двумерный массив string[][]. В XML я не знаю как это должно выглядеть.
В общем можно и как угодно эти данные хранить, только как сделать нормальную таблицу из нескольких столбцов..

а из XSL в заголовок содержимое этого элемента вставишь...
Ну так я об этом и спрашивал, как его вставить?
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #39
двумерный массив string[][]. В XML я не знаю как это должно выглядеть.

а что мешает сохранить его в файл и посмотреть?


В общем можно и как угодно эти данные хранить, только как сделать нормальную таблицу из нескольких столбцов..

Ну так я об этом и спрашивал, как его вставить?

<xsl:value-of select="откуда брать значение"/>

пример писать лень, можешь сделать так - создай Table в датасете, заполни его данными, и сохрани в xml, выложи тут xml, я тебе xsl сделаю
 
  • 🟠 22:16 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #40
а что мешает сохранить его в файл и посмотреть?
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfArrayOfString xmlns:xsi="Посилання видалено" xmlns:xsd="Посилання видалено">
<ArrayOfString>
<string>N = 12</string>
<string>Постоянно</string>
<string>Достаточно часто</string>
<string>Редко</string>
<string>Практически никогда</string>
<string>Трудно ответить</string>
</ArrayOfString>
<ArrayOfString>
<string>Количество</string>
<string>0</string>
<string>3</string>
<string>6</string>
<string>3</string>
<string>0</string>
</ArrayOfString>
</ArrayOfArrayOfString>
 
Назад
Зверху Знизу