21.8 聊天室显示界面
在聊天室显示界面中,将列表显示系统的聊天房间,供用户选择进入感兴趣的聊天室。此模块的实现也是基于数据库的,即利用数据库这个中间媒介实现聊天室的显示。
聊天室显示界面的实现文件如下。
- Default.aspx。
- Default.aspx.cs。
本节将详细讲解实现上述两个文件的过程。
21.8.1 聊天室列表页面
聊天室列表显示页面Default.aspx的功能是提供用户登录表单,供用户输入登录数据。其具体实现过程如下。
(1)插入1个DataList控件,设置其值为dlCha。
(2)在DataList控件中插入1个<ItemTemplate>模板。
(3)在<ItemTemplate>模板中插入1个HyperLink控件,用于以链接样式分别显示聊天室的名称,允许的最多在线人数,以及当前的在线人数。
(4)调用函数ComputerChatUserCount( ),计算聊天室的当前在线人数。
(5)调用Ajax程序集中的HoverMenuExtender控件,实现动态显示某聊天室当前在线用户列表。
21.8.2 聊天室列表处理页面
聊天室列表处理文件Default.aspx.cs的功能是获取系统内的聊天室信息,并将获取的信息存储处理,供系统主界面显示使用。其具体实现过程如下。
(1)引入命名空间和声明Default类。
(2)通过Page_Load载入初始化处理。
(3)通过BindPageData()获取并显示聊天室的信息。
(4)定义函数FormatChatNumberStatus(int currentNumber,int maxNumber)。
(5)使用函数FormatChatNumberStatus计算聊天室的人数,并判断聊天室的状态。
(6)定义函数ComputerChatUserCount(int chatID)。
(7)使用函数ComputerChatUserCount(int chatID)计算聊天室的在线用户数。
(8)定义函数ShowUserData(ListBox list,int chatID)。
(9)使用函数ShowUserData(ListBox list,int chatID)显示聊天室的用户。
上述操作实现的具体运行流程如图21-8所示。
图21-8 聊天室列表处理页面显示处理运行流程图
文件Default.aspx.cs的具体实现代码如下。
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引入新的命名空间
using ASPNETAJAXWeb.AjaxChat;
using System.Collections.Generic;
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
BindPageData();
}
}
private void BindPageData()
{ //获取聊天室的信息
Chat chat = new Chat();
DataSet ds = chat.GetLiaotian();
//显示聊天室
dlChat.DataSource = ds;
dlChat.DataBind();
}
protected string FormatChatNumberStatus(int currentNumber,int maxNumber)
{
if(currentNumber >= maxNumber) return "已满";
else return "未满";
}
protected void dlChat_ItemDataBound(object sender,DataListItemEventArgs e)
{ //找到显示用户列表的控件
ListBox lbUser = (ListBox)e.Item.FindControl("lbUser");
if(lbUser != null)
{ //显示在线用户
ShowUserData(lbUser,Int32.Parse(dlChat.DataKeys[e.Item.ItemIndex].ToString()));
}
}
protected int ComputerChatUserCount(int chatID)
{ //获取聊天室的用户
List<UserInfo> users = new List<UserInfo>();
int count = 0;
foreach(UserInfo ui in ASP.global_asax.Users)
{
if(ui.ChatID == chatID)
{
count++;
}
}
return count;
}
private void ShowUserData(ListBox list,int chatID)
{ //获取聊天室的用户
List<UserInfo> users = new List<UserInfo>();
foreach(UserInfo ui in ASP.global_asax.Users)
{
if(ui.ChatID == chatID)
{
users.Add(ui);
}
}
//显示聊天室的用户
list.DataSource = users;
list.DataValueField = "UserID";
list.DataTextField = "Username";
list.DataBind();
}
}