Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Итоги в DataGrid / 7 сообщений из 7, страница 1 из 1
24.03.2006, 13:28
    #33623364
Maxy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
Пытаюсь в Footer загнать итоги по двум полям DataGrid. Но не получается, пишет:
Код: plaintext
Exception Details: System.InvalidCastException: Specified cast is not valid.
по строке:
Код: plaintext
rowData = (DataRowView)(e.Item.DataItem);
Код следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
		private void DistributionGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
		{
			DataRowView rowData = null;
			Double price;
			System.Web.UI.WebControls.Literal necessaryLabel = null;
			System.Web.UI.WebControls.Literal separableLabel = null;
			System.Web.UI.WebControls.Literal totalLabel = null;
			switch (e.Item.ItemType)
			{
				case ListItemType.AlternatingItem:
				case ListItemType.EditItem:
				case ListItemType.Item:
				case ListItemType.SelectedItem:
					rowData = (DataRowView)(e.Item.DataItem);
					price = (Double)(rowData["amount_necessary"]);
					NecessaryTotal += price;
					necessaryLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblNecessary"));
					necessaryLabel.Text = price.ToString("C2");
					price = (Double)(rowData["amount_necessary"]);
					SeparableTotal += price;
					separableLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblSeparable"));
					separableLabel.Text = price.ToString("C2");
					break;
				case ListItemType.Footer:
					totalLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblNecessaryTotal"));
					totalLabel.Text = NecessaryTotal.ToString("C2");
					totalLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblSeparableTotal"));
					totalLabel.Text = SeparableTotal.ToString("C2");
					break;
				default:
					break;
			}
		}
Поможите?
...
Рейтинг: 0 / 0
24.03.2006, 15:34
    #33623890
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
у меня вот так работает, правда на васике
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 Private Sub dgAnkets_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgAnkets.ItemDataBound

        Select Case e.Item.ItemType
            Case ListItemType.Item, ListItemType.AlternatingItem
                If e.Item.Cells( 1 ).Text = mdtAnkets.Compute("Max([S])", "") Then
                    e.Item.BackColor = System.Drawing.Color.Blue
                    e.Item.ForeColor = System.Drawing.Color.White
                End If
            Case ListItemType.Footer
                e.Item.Cells( 0 ).Text = "<b>Итого</b>"
                e.Item.Cells( 1 ).Text = "<b>" & mdtAnkets.Compute("SUM([S])", "") & "</b>"
                e.Item.CssClass = "GRIDHEADERROW"
                e.Item.Cells( 1 ).Attributes.Add("align", "center")
        End Select
    End Sub
...
Рейтинг: 0 / 0
26.03.2006, 21:12
    #33625986
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
да у автора нормальный скрипт
проблема в конвертации, скорее всего в дабл.
посмотрите отладчиком, что возвращает rowData.
на всякий http://www.sql.ru/forum/actualthread.aspx?tid=79506&hl=globalization+parse


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
27.03.2006, 20:16
    #33628227
Maxy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
profil
проблема в конвертации, скорее всего в дабл.
посмотрите отладчиком, что возвращает rowData.

до конвертации дело не доходит. Все заканчивается присвоением rowData соответствующего значения объекта.

Проблема исчезает, если DataGrid заполнять через DataSet. У меня же во всей проге заполнение идет через SqlDataReader c помощью StoredProcedure.

Пока не знаю, как в моих многочисленных DataGrid зделать итоговые значения по числовым полям. Может, кто поможет?
...
Рейтинг: 0 / 0
28.03.2006, 12:12
    #33629175
Maxy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
Ничего не придумал лучшего, как поступить "топорно" и это сработало:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
		private void DistributionGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
		{
			System.Web.UI.WebControls.Literal totalLabel = null;
			switch (e.Item.ItemType)
			{
				case ListItemType.Footer:

					System.Data.SqlClient.SqlCommand SelectAmountTotalCommand;
					SelectAmountTotalCommand = new System.Data.SqlClient.SqlCommand();
					SelectAmountTotalCommand.CommandText = "[SelectAmountTotal]";
					SelectAmountTotalCommand.CommandType = System.Data.CommandType.StoredProcedure;
					SelectAmountTotalCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id", System.Data.SqlDbType.Int));
					SelectAmountTotalCommand.Parameters["@id"].Value = ID;
					SelectAmountTotalCommand.Connection  = DataBase.Connection;
					SelectAmountTotalCommand.Connection.Open();
					SqlDataReader reader = SelectAmountTotalCommand.ExecuteReader();
					while (reader.Read())
					{
						NecessaryTotal += reader.GetDouble( 2 );
						SeparableTotal += reader.GetDouble( 4 );
					}
					reader.Close();
					SelectAmountTotalCommand.Connection.Close();
					
					totalLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblNecessaryTotal"));
					totalLabel.Text = NecessaryTotal.ToString("N");
					totalLabel = (System.Web.UI.WebControls.Literal)
						(e.Item.FindControl("lblSeparableTotal"));
					totalLabel.Text = SeparableTotal.ToString("N");
					break;
				default:
					break;
			}
		}
...
Рейтинг: 0 / 0
28.03.2006, 12:59
    #33629385
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
Maxy, все же лучше оставить первый вариант :)
совершенно не удивительно, что на строке rowData = (DataRowView)(e.Item.DataItem); у вас выскакивает ошибка.
у Вас же источником является IDataReader, а для него DataItem соответствует типу System.Data.Common.DbDataRecord

+ /topic/218694#1897757


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
30.03.2006, 20:23
    #33636278
Maxy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоги в DataGrid
profil
Maxy, все же лучше оставить первый вариант :)
совершенно не удивительно, что на строке rowData = (DataRowView)(e.Item.DataItem); у вас выскакивает ошибка.
у Вас же источником является IDataReader, а для него DataItem соответствует типу System.Data.Common.DbDataRecord

+ /topic/218694#1897757


Posted via ActualForum NNTP Server 1.3
Спасибо, теперь заработал мой первый вариант!
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Итоги в DataGrid / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]