Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > .NET > ASP.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.10.2013, 13:16   #1
Skifych
Новичок
 
Регистрация: 09.10.2013
Сообщений: 2
Репутация: 10
По умолчанию TableRow. Формирование таблицы

Добрый день.
Столкнулся с проблемой при создании простенькой вебчасти.
консольное приложение, на котором тестилась работа работает нормально, а вот вебчасть имеет "особенности".
Так она делает:
Выводит отдельно курс валют для USD, EUR, RUB (работает нормально)
Выводит табличку со всеми курсами (выводит бред)
Код:

<div><asp:Label ID="ZagolovokLabel" runat="server" Text="Курс валют НБУ по состоянию на:"></asp:Label></div>
<hr />
<div><asp:Label ID="usdLabel" runat="server" text="USD: "></asp:Label><asp:Label ID="usdCurs" runat="server" text="---.--"></asp:Label></div>
<div><asp:Label ID="eurLabel" runat="server" text="EUR: "></asp:Label><asp:Label ID="eurCurs" runat="server" text="---.--"></asp:Label></div>
<div><asp:Label ID="rubLabel" runat="server" text="RUB: "></asp:Label><asp:Label ID="rubCurs" runat="server" text="---.--"></asp:Label></div>
<hr />
<div>
<asp:Button ID="ButtonCursValut" runat="server" Text="Обновить" OnClick="ButtonCursValut_Click" /></div>
<hr />
<asp:Table ID="TableCursValut" runat="server"></asp:Table>

собственно кусок кода на клин по кнопке:

Код:

protected void ButtonCursValut_Click(object sender, EventArgs e)
        {
            WebClient webClient = new WebClient();
            String kursVal = webClient.DownloadString("http://bank-ua.com/export/currrate.xml");
            
            XDocument valDoc = XDocument.Parse(kursVal);
            var itemsXML = from x in valDoc.Descendants("item")
                           select new
                           {
                               dateXML = x.Descendants("date").First().Value,
                               codeXML = x.Descendants("code").First().Value,
                               char3XML = x.Descendants("char3").First().Value,
                               sizeXML = x.Descendants("size").First().Value,
                               nameXML = x.Descendants("name").First().Value,
                               rateXML = x.Descendants("rate").First().Value,
                               changeXML = x.Descendants("change").First().Value
                           };
            var ruVal = new string[7];
            var usVal = new string[7];
            var evVal = new string[7];
            TableRow rw = new TableRow();
            foreach (var itemXML in itemsXML)
            {
                if (itemXML.char3XML == "RUB")
                {
                    ruVal[0] = itemXML.dateXML;
                    ruVal[1] = itemXML.codeXML;
                    ruVal[2] = itemXML.char3XML;
                    ruVal[3] = itemXML.sizeXML;
                    ruVal[4] = itemXML.nameXML;
                    ruVal[5] = itemXML.rateXML;
                    ruVal[6] = itemXML.changeXML;
                }
                if (itemXML.char3XML == "USD")
                {
                    usVal[0] = itemXML.dateXML;
                    usVal[1] = itemXML.codeXML;
                    usVal[2] = itemXML.char3XML;
                    usVal[3] = itemXML.sizeXML;
                    usVal[4] = itemXML.nameXML;
                    usVal[5] = itemXML.rateXML;
                    usVal[6] = itemXML.changeXML;
                }
                if (itemXML.char3XML == "EUR")
                {
                    evVal[0] = itemXML.dateXML;
                    evVal[1] = itemXML.codeXML;
                    evVal[2] = itemXML.char3XML;
                    evVal[3] = itemXML.sizeXML;
                    evVal[4] = itemXML.nameXML;
                    evVal[5] = itemXML.rateXML;
                    evVal[6] = itemXML.changeXML;
                }
                TableCell cel = new TableCell();
                cel.Text = itemXML.dateXML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.codeXML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.char3XML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.sizeXML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.nameXML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.rateXML;
                rw.Cells.Add(cel);
                cel.Text = itemXML.changeXML;
                rw.Cells.Add(cel);
                TableCursValut.Rows.Add(rw);
            }
            usdCurs.Text = usVal[5] + " за " + usVal[3] + " USD";
            eurCurs.Text = evVal[5] + " за " + evVal[3] + " EUR";
            rubCurs.Text = ruVal[5] + " за " + ruVal[3] + " RUB";
            String tekData;
            tekData = DateTime.Now.ToString();
            ZagolovokLabel.Text = "Курс валют НБУ по состоянию на: " + tekData + " - Обновлен!";
        }

Проблема в том, что TableCursValut.Rows.Add(rw); даёт только одну строку, В ячейки попадают только значения:
cel.Text = itemXML.changeXML;
То есть одно значение вместо семи.
Подскажите, что делаю не так, или не правильно пользуюсь функцией?

Последний раз редактировалось Skifych; 09.10.2013 в 13:21. Причина: вставлено изображение
Skifych вне форума   Ответить с цитированием
Старый 09.10.2013, 14:20   #2
Skifych
Новичок
 
Регистрация: 09.10.2013
Сообщений: 2
Репутация: 10
По умолчанию

Разобрался.
Действительно, неправильно использовал функцию
Вот правильный код
Код:

 protected void ButtonCursValut_Click(object sender, EventArgs e)
        {
            WebClient webClient = new WebClient();
            String kursVal = webClient.DownloadString("http://bank-ua.com/export/currrate.xml");
            
            XDocument valDoc = XDocument.Parse(kursVal);
            var itemsXML = from x in valDoc.Descendants("item")
                           select new
                           {
                               dateXML = x.Descendants("date").First().Value,
                               codeXML = x.Descendants("code").First().Value,
                               char3XML = x.Descendants("char3").First().Value,
                               sizeXML = x.Descendants("size").First().Value,
                               nameXML = x.Descendants("name").First().Value,
                               rateXML = x.Descendants("rate").First().Value,
                               changeXML = x.Descendants("change").First().Value
                           };
            var ruVal = new string[7];
            var usVal = new string[7];
            var evVal = new string[7];
            
            foreach (var itemXML in itemsXML)
            {
                
                if (itemXML.char3XML == "RUB")
                {
                    ruVal[0] = itemXML.dateXML;
                    ruVal[1] = itemXML.codeXML;
                    ruVal[2] = itemXML.char3XML;
                    ruVal[3] = itemXML.sizeXML;
                    ruVal[4] = itemXML.nameXML;
                    ruVal[5] = itemXML.rateXML;
                    ruVal[6] = itemXML.changeXML;
                }
                if (itemXML.char3XML == "USD")
                {
                    usVal[0] = itemXML.dateXML;
                    usVal[1] = itemXML.codeXML;
                    usVal[2] = itemXML.char3XML;
                    usVal[3] = itemXML.sizeXML;
                    usVal[4] = itemXML.nameXML;
                    usVal[5] = itemXML.rateXML;
                    usVal[6] = itemXML.changeXML;
                }
                if (itemXML.char3XML == "EUR")
                {
                    evVal[0] = itemXML.dateXML;
                    evVal[1] = itemXML.codeXML;
                    evVal[2] = itemXML.char3XML;
                    evVal[3] = itemXML.sizeXML;
                    evVal[4] = itemXML.nameXML;
                    evVal[5] = itemXML.rateXML;
                    evVal[6] = itemXML.changeXML;
                }

                var allVal = new string[7];
                    allVal[0] = itemXML.dateXML;
                    allVal[1] = itemXML.codeXML;
                    allVal[2] = itemXML.char3XML;
                    allVal[3] = itemXML.sizeXML;
                    allVal[4] = itemXML.nameXML;
                    allVal[5] = itemXML.rateXML;
                    allVal[6] = itemXML.changeXML;
                TableRow rw = new TableRow();
                for (int i = 0; i < 7; i++) { 
                    
                    TableCell cel = new TableCell();
                    cel.Text = allVal[i];
                    rw.Cells.Add(cel);
                }
                TableCursValut.Rows.Add(rw);

                

                
            }
            usdCurs.Text = usVal[5] + " за " + usVal[3] + " USD";
            eurCurs.Text = evVal[5] + " за " + evVal[3] + " EUR";
            rubCurs.Text = ruVal[5] + " за " + ruVal[3] + " RUB";
            
            
            String tekData;
            tekData = DateTime.Now.ToString();
            ZagolovokLabel.Text = "Курс валют НБУ по состоянию на: " + tekData + " - Обновлен!";
        }

то есть, вся загвоздка в TableCell cel = new TableCell(); Для каждой новой ячейки нужно заново вызывать конструктор. Деструктора нет в явном виде, потому реализовал черед массив allVal.

Последний раз редактировалось Skifych; 09.10.2013 в 14:22. Причина: добавил каммент
Skifych вне форума   Ответить с цитированием
Старый 09.10.2013, 15:23   #3
eval
Форумчанин
 
Регистрация: 29.08.2012
Сообщений: 4,024
Репутация: 422
По умолчанию

ужас, про биндинг почитайте
eval вне форума   Ответить с цитированием
Старый 10.10.2013, 10:13   #4
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
Репутация: 0
По умолчанию

[QUOTE=Skifych;1284160]
Код:

                TableRow rw = new TableRow();
                    TableCell cel = new TableCell();

Вот эти две строчки(их место вне цикла) и были источником Вашей проблемы.
simples вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формирование таблицы _Rumata_ Microsoft Office Excel 9 31.08.2012 12:42
формирование таблицы из элементов другой таблицы с удалением повторяющихся значений Selicat Microsoft Office Excel 1 20.10.2011 22:36
формирование новой таблицы по условию RUSer Microsoft Office Excel 9 22.04.2011 08:17
формирование сводной таблицы ЦЕРЦЕЯ Microsoft Office Excel 1 19.10.2010 22:17
Формирование таблицы Miker87 Microsoft Office Excel 4 22.07.2008 13:25


02:13.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru