Печать содержимого данных в формате HTML / Test, включая заголовки и итоги, используя C # .net 2.0 - PullRequest
0 голосов
/ 08 марта 2011

У меня есть приложение для создания динамических отчетов с использованием динамических SQL. Результаты запроса будут сохранены в таблицах данных. Мне нужна функция, чтобы взять данные и ширину столбца в качестве входных данных и распечатать отчет в формате HTML / Text. Функция должна определить правильный тип данных столбца данных и отформатировать его в соответствии с типом данных.

Я напишу такой запрос и выведу значения в таблицу данных:
ВЫБРАТЬ [ID] , [AccountName] AS [Account Name] , [TransDate] AS [Trans Date] ,[Количество] ОТ [AccountsTable]

Ниже приводится набор результатов в datatable:
ID [Имя учетной записи] [Дата трансакции] [Сумма]
656 Счет продаж 14 апреля 2003 г. 13500,00
657 Счет покупок 15 апреля 2003 г. 2000,00
658 Проверка счета 15 апреля 2003 г. 5250,00
659 Счет продаж 16 апреля 2003 г. 8000,00
660 Проверка счета 17 апреля 2003 г. 6500,00
661 Счет покупок 18 апреля 2003 г. 1000,00
662 Торговый счет 18 апреля 2003 года 10250,00
663 Аккаунт со скидкой 19 апреля 2003 г. 500,00
Итого: 47000,00

Я бы хотел напечатать эти значения в HTML-файл, как показано выше. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 08 марта 2011
protected void Page_Load(object sender, EventArgs e)
    {

        //make your own table here, whathever way you like ie get it from database
        DataTable dt = new DataTable();
        dt.Columns.Add("col1");
        dt.Columns.Add("col2");
        dt.Rows.Add(new object[] { "1", "2" });
        dt.Rows.Add(new object[] { "5", "6" });

        RenderTable(dt, 100);
    }

    private void RenderTable(DataTable datatable, int column_width)
    {
        Table table = new Table();

        //add header to your table 
        TableHeaderRow header = new TableHeaderRow();

        foreach (DataColumn dcol in datatable.Columns)
        {
            TableHeaderCell cell = new TableHeaderCell();
            cell.Width = column_width;

            Label headlbl = new Label();
            headlbl.Text = dcol.ColumnName;

            cell.Controls.Add(headlbl);
            header.Controls.Add(cell);
        }

        table.Controls.Add(header);

        //fill with data
        foreach (DataRow row in datatable.Rows)
        {
            TableRow tr = new TableRow();
            for (int i = 0; i < datatable.Columns.Count; i++)
            {
                TableCell td = new TableCell();
                td.Width = column_width;

                Label label = new Label();
                label.Text = Convert(row[i], datatable.Columns[i].DataType);

                td.Controls.Add(label);
                tr.Controls.Add(td);
            }

            table.Controls.Add(tr);
        }

        //add other rows here ie totals

        Page.Controls.Add(table);

    }

    private string Convert(object val, Type type)
    {
        //do whatever you want with format of your cells
        return val.ToString();
    }
...