Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 13
1

Ввод и вывод данных из коллекции

13.03.2011, 23:26. Показов 2912. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
 
namespace SRS1
{
    public class Client
    {
        private string Name;
        private string Passport;
        private DateTime BirthDate;
 
        public Client(string ClientName, string ClientPassport, DateTime ClientBirthDate)
        {
            name = ClientName;
            passport = ClientPassport;
            birthdate = ClientBirthDate;
        }
 
        public void EditClient(string ClientName, string ClientPassport, DateTime ClientBirthDate)
        {
            Name = ClientName;
            Passport = ClientPassport;
            birthdate = ClientBirthDate;
        }
 
        public string passport
        {
            get
            {
                return Passport;
            }
            set
            {
                Passport = value;
            }
        }
 
        public string name
        {
            get
            {
                return Name;
            }
            set
            {
                Name = value;
            }
        }
 
        public int age
        {
            get
            {
                int a;
                a = DateTime.Now.Year - BirthDate.Year;
                return a;
            }
        }
 
        public DateTime birthdate
        {
            get
            {
                return BirthDate;
            }
            set
            {
                if (DateTime.Now > value)
                    BirthDate = value;
                else
                    throw new Exception("Введена неверная дата рождения");
            }
        }
    }
 
 
 
 
    public class Clients : IEnumerable
    {
        private ArrayList ClientsList;
        public Clients()
        {
            ClientsList = new ArrayList();
        }
        public int ClientsCount
        {
            get
            {
                return ClientsList.Count;
            }
        }
        public void AddClient(Client c)
        {
            ClientsList.Add(c);
        }
        public void RemoveClient(int ClientToRemove)
        {
            ClientsList.RemoveAt(ClientToRemove);
        }
        public Client GetClient(int ClientID)
        {
            return (Client)ClientsList[ClientID];
        }
 
        public IEnumerator GetEnumerator()
        {
            return ClientsList.GetEnumerator();
        }
 
        public Client this[int pos]
        {
            get
            {
                return ((Client)ClientsList[pos]);
            }
            set
            {
                ClientsList[pos] = value;
            }
        }
    }
 
 
 
 
 
    public partial class _Default : System.Web.UI.Page
    {
        Clients cl;
 
        protected void Page_Load(object sender, EventArgs e)
        {
            cl = new Clients();
            cl.AddClient(new Client("Иванов", "9002", new DateTime(1980, 12, 21)));
            //cl.AddClient(new Client("Петров", "9004", new DateTime(1975, 03, 15)));
        }
 
        protected void InputButton_Click(object sender, EventArgs e)
        {
            Client tmp = new Client("Пак", "9004", new DateTime(1975, 03, 15));
            cl.AddClient(tmp);
        }
 
        protected void OutputButton_Click(object sender, EventArgs e)
        {
            foreach (Client c in cl)
            {
                Response.Write("Имя=" + c.name + " ");
                Response.Write("Паспорт=" + c.passport + " ");
                Response.Write("Возраст=" + c.age);
                Response.Write("</br>");
            }
        }
    }
}
Имеется класс Client и класс Clients, поле которого представляет собой коллекцию объектов класса Client.
Клиент с фамилией "Иванов" вводится в коллекцию без проблем.
Нужно, чтобы при нажатии кнопки InputButton вводился очередной клиент с фамилией "Пак".
При нажатии кнопки вывода, выводится только "Иванов".

В чем моя ошибка? Может я неправильно ввожу клиента через кнопку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2011, 23:26
Ответы с готовыми решениями:

Вывод данных из вложенной коллекции
Добрый день. Есть коллекция private List&lt;ArrayList&gt; verb; Эта коллекция содержит в себе...

Привязка класса к коллекции и вывод данных в табличном виде
Помогите, пожалуйста!!! У меня есть класс, в котором хранятся все данные о клиентах (данные...

Ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хранилище данных в файле)
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и...

Реализовать ввод данных, вывод данных, поиск по номеру квартиры и возрасту
ввод данных, вывод данных, поиск по номеру квартиры и возрасту. Запись состоит из номера квартиры...

10
86 / 85 / 11
Регистрация: 12.07.2009
Сообщений: 465
14.03.2011, 00:30 2
C#
1
2
3
4
5
6
7
8
9
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                cl = new Clients();
                cl.AddClient(new Client("Иванов", "9002", new DateTime(1980, 12, 21)));
                //cl.AddClient(new Client("Петров", "9004", new DateTime(1975, 03, 15)));
            }
        }
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 13
14.03.2011, 00:51  [ТС] 3
в таком случае, в объекте cl хранится NULL

[NullReferenceException: Object reference not set to an instance of an object.]
0
86 / 85 / 11
Регистрация: 12.07.2009
Сообщений: 465
14.03.2011, 00:54 4
C#
1
2
3
4
5
6
7
8
9
10
11
        Clients cl = new Clients();
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                cl.AddClient(new Client("Иванов", "9002", new DateTime(1980, 12, 21)));
                //cl.AddClient(new Client("Петров", "9004", new DateTime(1975, 03, 15)));
            }
 
        }
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 13
14.03.2011, 01:08  [ТС] 5
программа работает, но как раньше, данные при нажатии на кнопку вывод не полностью выводятся...
0
86 / 85 / 11
Регистрация: 12.07.2009
Сообщений: 465
14.03.2011, 01:13 6
Цитата Сообщение от newStudent Посмотреть сообщение
программа работает, но как раньше, данные при нажатии на кнопку вывод не полностью выводятся...
А кто не выводится?

Не по теме:

блин, я уже сплю=)

0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 13
14.03.2011, 01:14  [ТС] 7
Подправил код, в каждом обработчике сделал вывод:
C#
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
38
39
40
41
42
43
44
45
46
47
    public partial class _Default : System.Web.UI.Page
    {
        Clients cl = new Clients();
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cl.AddClient(new Client("Иванов", "9002", new DateTime(1980, 12, 21)));
                //cl.AddClient(new Client("Петров", "9004", new DateTime(1975, 03, 15)));
 
                foreach (Client c in cl)
                {
                    Response.Write("Имя=" + c.name + " ");
                    Response.Write("Паспорт=" + c.passport + " ");
                    Response.Write("Возраст=" + c.age);
                    Response.Write("</br>");
                }
            }
        }
 
        protected void InputButton_Click(object sender, EventArgs e)
        {
            Client tmp = new Client("Пак", "9004", new DateTime(1975, 03, 15));
            cl.AddClient(tmp);
 
            foreach (Client c in cl)
            {
                Response.Write("Имя=" + c.name + " ");
                Response.Write("Паспорт=" + c.passport + " ");
                Response.Write("Возраст=" + c.age);
                Response.Write("</br>");
            }
        }
 
        protected void OutputButton_Click(object sender, EventArgs e)
        {
            foreach (Client c in cl)
            {
                Response.Write("Имя=" + c.name + " ");
                Response.Write("Паспорт=" + c.passport + " ");
                Response.Write("Возраст=" + c.age);
                Response.Write("</br>");
            }
        }
    }
}
с таким кодом у меня:
при загрузке страницы выводится только Иванов
при нажатии Input выводится только Пак
при нажатии Output ничего не выводится

почему обработчики событий работают с копией объекта, а не с самим объектом?
0
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
14.03.2011, 01:29 8
newStudent, Потому что каждый раз страница создается с нуля. Т.е. пришел запрос - созданы объекты, обработаны, отправлены назад, уничтожены на стороне сервера. При повторном запросе у тебя на стороне сервера объект вообще не инициализирован, поэтому ничего и не видишь.
Создавай в каждой методе объект понову. Либо, как вариант сохраняй его в состоянии представления, сессии или кэше.
Ссыль 1
Ссыль 2
1
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 4
14.03.2011, 13:11 9
Цитата Сообщение от Johnny_D Посмотреть сообщение
newStudent, Потому что каждый раз страница создается с нуля. Т.е. пришел запрос - созданы объекты, обработаны, отправлены назад, уничтожены на стороне сервера. При повторном запросе у тебя на стороне сервера объект вообще не инициализирован, поэтому ничего и не видишь.
Создавай в каждой методе объект понову. Либо, как вариант сохраняй его в состоянии представления, сессии или кэше.
Ссыль 1
Ссыль 2
да.
но если список один на всех - я сделал бы Array static, только тогда его изменение сделать потокобезопасным(просто lock).
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 13
14.03.2011, 18:50  [ТС] 10
Начал использовать функцию ViewState
C#
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
 public partial class _Default : System.Web.UI.Page
    {
        Clients cl = new Clients();
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (ViewState["Clients"]==null)
            {
                cl.AddClient(new Client("Иванов", "9001", new DateTime(1990, 12, 12)));
                ViewState["Clients"] = cl;
            } 
            else
            {
                cl = (Clients)ViewState["Clients"];
            }
        }
        
 
        protected void InputButton_Click(object sender, EventArgs e)
        {
            cl.AddClient(new Client("Пак", "9003", new DateTime(1989, 02, 14)));
            ViewState["Clients"] = cl;
        }
 
 
        protected void OutputButton_Click(object sender, EventArgs e)
        {
            foreach (Client c in cl)
            {
                Response.Write("Имя=" + c.name + " ");
                Response.Write("Паспорт=" + c.passport + " ");
                Response.Write("Возраст=" + c.age);
                Response.Write("</br>");
            }
        }
    }
Выводится ошибка:
см. вложение
Миниатюры
Ввод и вывод данных из коллекции  
0
86 / 85 / 11
Регистрация: 12.07.2009
Сообщений: 465
14.03.2011, 19:00 11
Правельно.
Ты должен сделать класс пригодным для сериализации

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Serializable]
public class Client
    {
        private string Name;
        private string Passport;
        private DateTime BirthDate;
 
        public Client(string ClientName, string ClientPassport, DateTime ClientBirthDate)
        {
            name = ClientName;
            passport = ClientPassport;
            birthdate = ClientBirthDate;
        }
         .........................
1
14.03.2011, 19:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2011, 19:00
Помогаю со студенческими работами здесь

Создать файл, обеспечить ввод данных, вывод данных, поиск по любому критерию
Составить программу, которая создаёт файл,обеспечивает ввод данных,вывод данных,поиск по любому...

Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по номеру
Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по номеру. Каждая запись...

Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по номеру
Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по номеру. Каждая запись...

Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по ФИО
Составьте программу, которая обеспечивает ввод данных, вывод данных, поиск по ФИО. Каждая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru