1. Во-первых, для того, чтобы было легче осуществлять взаимодействие с базой данных приложения, создадим несколько объектов в базе данных.
a. Добавьте в базу представление View_Messages (пункт views):
SELECT dbo.Messages.id, dbo.Messages.text, dbo.Messages.date, dbo.Messages.toUserId, dbo.Messages.fromUserId,
User1.nick AS FromUser, User2.nick AS ToUser
FROM dbo.Messages INNER JOIN
dbo.Users AS User1 ON dbo.Messages.fromUserId = User1.id INNER JOIN
dbo.Users AS User2 ON dbo.Messages.toUserId = User2.id
ORDER BY dbo.Messages.date
b. Добавьте хранимую процедуру для новых сообщений:
CREATE PROCEDURE CreateMessageSP
@date datetime,
@text nvarchar(1000),
@from int,
@to int
AS
insert into Messages ([date],[text],fromUserId,toUserId)
values (@date, @text, @from, @to)
c. Добавьте хранимую процедуру для выбора переписки двух пользователей:
CREATE PROCEDURE GetMessageHistoryForUsersSP
@user1 int,
@user2 int
AS
select * from view_messages where (fromUserId=@user1 and toUserId=@user2) or (fromUserId=@user2 and toUserId=@user1)
2. Создайте страницу SendMessage.aspx. Разместите на странице компоненты:
a. Label (Text=’История сообщений с’),
b. DropDownList (ID=ddlUsers),
c. GridView (ID=gvMessages),
d. Label (Text=’Новой сообщение’),
e. TextBox (ID=tbMessage),
f. RequiredFieldValidator (ID=rfvMessage),
g. Buton (ID=btnSend, Text=’Отправить’).
h. SqlDataSource (ID=dsUsers)
i. SqlDataSource (ID=dsMessages)
3. Заполним выпадающий список ddlUsers данными из таблицы Users:
a. У компонента dsUsers выберите команду Configure Data Source…, свяжите данный компонент с вашей базой данных через строку подключения и настройте его на выбор полей id и nick из таблицы Users.
b. Задайте компоненту ddlUsers следующие свойства:
i. AutoPostBack=true
ii. DataSourceID=dsUsers
iii. DataTextField=nick
iv. DataValueField=id
Теперь при отображении страницы в браузере компонент ddlUsers будет содержать список всех пользователей, а выбранному пользователю (свойство SelectedText) будет соответствовать его идентификатор (свойство SelectedValue).
4. Отобразим в gvMessages историю сообщений между пользователем, вошедшим на сайт, и выбранным в списке пользователем.
a. У компонента dsMessages выберите команду Configure Data Source…, свяжите данный компонент с вашей базой данных через строку подключения и настройте его на выбор данных из хранимой процедуры GetMessageHistoryForUsersSP. Для параметра хранимой процедуры user1 выберите источник данных Session и укажите SessionField=UserID. Для параметра user2 выберите источник данных Control и укажите ControlID=ddlUsers. Таким образом мы указали, что процедура GetMessageHistoryForUsersSP выбирает данные для пользователя, который зашел на сайт (user1), и для пользователя, выбранного в списке (user2).
b. Компоненту gvMessages задайте свойства:
i. AutoGenerateColumns=false
ii. DataSourceId=dsMessages
iii. Width=90%
c. Через свойство Columns настройте порядок отображения столбцов:
i. FromUser (HeaderText=’От’)
ii. Date (HeaderText=’Дата и время’)
iii. Text (HeaderText=’Сообщение’)
d. Остальные столбцы удалите.
5. «Посылка сообщений»:
a. Компоненту dsMessages установите свойство InsertCommandType = StoredProcedure и раскройте свойство InsertQuery.
b. В появившемся окне в поле Insert Command укажите имя хранимой процедуры для создания нового сообщения и нажмите кнопку Refresh Parameters.
c. Список параметров хранимой процедуры должен состоять из четырех пунктов:
i. date (ParameterSource=None)
ii. text (ParameterSource=Control, ControlID=tbMessage)
iii. from (ParameterSource=Session, SessionField=UserID)
iv. to (ParameterSource=Control, ControlID=ddlUsers)
d. В обработчик нажатия кнопки btnSend поместите код:
// Заполнение параметра date для хранимой процедуры
dsMessages.InsertParameters["date"].DefaultValue = DateTime.Now.ToString();
// выполнение хранимой процедуры CreateMessageSP
dsMessages.Insert();
// очистка текстового поля
tbMessage.Text = "";
e. С помощью компонента rfvMessage запретите отправку пустых сообщений.
Запустите приложение, проверьте работу страницы для двух пользователей.
6. Создайте страницу Message.aspx. Разместите на странице компоненты:
a. Label (Text=’Мои сообщения’)
b. GridView (ID=gvMessages)
c. SqlDataSource (ID=dsMessages)
d. HyperLink (NavigateUrl=SendMessage.aspx, text=’Написать новое сообщение’)
7. Компонент dsMessages должен выбрать поля text, date, fromUserId, fromUser из представления View_Messages с условием отбора: поле toUserId равно идентификатору пользователя, вошедшего на сайт(Session[“UserId”]), и с убывающей сортировкой по полю date.
8. Настройте компонент gvMessages:
a. Задайте значения свойств:
i. AutoGenerateColumns=false
ii. DataSourceId=dsMessages
iii. Width=90%
b. Через свойство Columns настройте порядок отображения столбцов:
i. FromUserId (ReadOnly=true, InsertVisible=false)
ii. FromUser (HeaderText=’От’)
iii. Date (HeaderText=’Дата и время’)
iv. Text (HeaderText=’Сообщение’)
c. Добавьте к отображаемым столбцам командное поле Select (SelectText=’Ответить’)
d. Создайте обработчик события RowCreate, чтобы скрыть столбец идентификаторов пользователей, приславших сообщения:
e.Row.Cells[0].Visible = false;
e. Создайте обработчик события SelectedIndexChanged для перехода на страницу SendMessage.aspx, чтобы ответить указанному пользователю:
// Запоминаем пользователя, которому хотим ответить
Session["toUserId"] = int.Parse(gvMessages.SelectedRow.Cells[0].Text);
// переходим на указанную страницу
Response.Redirect("SendMessage.aspx");
Запустите приложение, проверьте работу страницы.
9. Осталось при загрузке страницы SendMessage.aspx выбирать нужного пользователя по значению Session[“toUserId”], если оно указано. В событии страницы Page_Load укажите:
if (!this.IsPostBack)// страница загружается первый раз
{
if (Session["toUserId"] != null) // значение toUserId задано
{
// выбираем указанного пользователя
ddlUsers.SelectedValue = Session["toUserId"].ToString();
}
}
Яркие и прикольные футболки отлично разнообразят ваш имидж и привлекут внимание!
Очень познавательный Блог о интертет-маркетинге. Информация, полезная всем - и новичкм и профи.
Квалифицированная автоматическая раскрутка - ваш сайт будет в топе поиска.