четверг, 26 марта 2009 г.

Создание страниц Message.aspx и SendMessage.aspx

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();

}

}



Яркие и прикольные футболки отлично разнообразят ваш имидж и привлекут внимание!

Очень познавательный Блог о интертет-маркетинге. Информация, полезная всем - и новичкм и профи.

Квалифицированная автоматическая раскрутка - ваш сайт будет в топе поиска.