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();
            }
        }
Яркие и прикольные футболки отлично разнообразят ваш имидж и привлекут внимание!
Очень познавательный Блог о интертет-маркетинге. Информация, полезная всем - и новичкм и профи.
Квалифицированная автоматическая раскрутка - ваш сайт будет в топе поиска.
