Foxtable(狐表)用户栏目专家坐堂 → openQQ的聊天窗口的用户分组,组如何排序?


  共有2541人关注过本帖树形打印复制链接

主题:openQQ的聊天窗口的用户分组,组如何排序?

帅哥哟,离线,有人找我吗?
kolen
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:677 积分:6228 威望:0 精华:0 注册:2012/1/20 17:53:00
openQQ的聊天窗口的用户分组,组如何排序?  发帖心情 Post By:2016/1/21 16:49:00 [只看该作者]

openQQ的聊天窗口的用户分组,组如何排序?
测试了一下,按照A-Z也是不对的,如图,应该怎么设置,请老师指
导一下,谢谢!

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160121164306.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2016/1/21 17:15:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
kolen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:677 积分:6228 威望:0 精华:0 注册:2012/1/20 17:53:00
  发帖心情 Post By:2016/1/21 17:04:00 [只看该作者]

用户数据保存在外部表中,增加了列department




客户端代码:


If QQClient.Ready Then '判断QQ是否已经打开
    Return
End If

QQClient.ServerIP = "192.168.0.39"  '指定服务器IP地址
QQClient.ServerPort = 52177  '指定服务器端口


    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C  '设置了外部数据源,这样能够使用下面的外部数据表
    cmd.CommandText = "SELECT * Fr om {xinruiusers} where Name = '" & User.Name & "' " '获得外部数据表xinruiusers的当前用户名的行
    dt = cmd.ExecuteReader()

    If dt.DataRows.Count > 0 Then
    QQClient.UserName = dt.DataRows(0)("department") & "." & user.Name
    End If

If QQClient.Start() = True '如果登录成功
    Dim msg As String =  "恭喜,OpenQQ登录成功!"
    If QQClient.ServerMessage > "" Then '如果服务器返回了欢迎信息
        msg = msg & QQClient.ServerMessage
    End If
    
    popMessage(msg,"提示",PopiconEnum.Infomation,5)
Else '如果登录失败,显示服务器返回错误信息
    
    PopMessage("QQClient登录失败,原因:" & vbcrlf & QQClient.ServerMessage,"提示",PopiconEnum.Error,5)
End If

[此贴子已经被作者于2016/1/21 17:14:26编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
kolen
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:677 积分:6228 威望:0 精华:0 注册:2012/1/20 17:53:00
  发帖心情 Post By:2016/1/21 17:08:00 [只看该作者]

服务端的网络监视器中Userlogging事件代码:


Dim pts() As String = e.UserName.Split(".")

Dim dr1 As DataRow
dr1 = DataTables("xinruiusers").Find("department = '" & pts(0) & "' And Name = '" & pts(1) & "'")

If dr1 Is Nothing  Then '判断此用户不存在
    e.Message  = "用户名错误!" '返回给登录者的提示信息
    Return
End If

e.Success = True '允许用户登录
DataTables("xinruiusers").Load
'添加所有同事为好友
For Each dr2 As DataRow In DataTables("xinruiusers").DataRows
    Dim nm As String =  dr2("department") & "." & dr2("Name")
    If nm <> e.UserName AndAlso nm <> ".Groups" AndAlso nm <> ".Roles" Then '如果不是登录者本人 '因为用户登录外部表中,默认有2行.Groups和.Roles,所以这里把这两行排除一下。
        e.Buddies.Add(nm)
    End If
Next
[此贴子已经被作者于2016/1/21 17:11:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/21 17:14:00 [只看该作者]

测试了一下,是根据_Identify排序的。所以你要控制排序,你就必须按照顺序数据行。

 

比如有四个分组,第一行、第二行、第三行、第四行,就排序好分组。


 回到顶部
帅哥哟,离线,有人找我吗?
kolen
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:677 积分:6228 威望:0 精华:0 注册:2012/1/20 17:53:00
  发帖心情 Post By:2016/1/21 17:22:00 [只看该作者]

 红袍老师:你的意思是e.Buddies.Add(nm),排序根据nm数据加入e.Buddies的先后顺序吗?我怎么调整好呢?不是很明白,
这里的_identify是哪个表的主键列呢?


[此贴子已经被作者于2016/1/21 17:23:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/21 17:31:00 [只看该作者]

哦,说错了,可以指定排序的,根据添加的用户的先后排序的

 

For Each dr2 As DataRow In DataTables("用户").Select("", "部门")
    Dim nm As String =  dr2("部门") & "." & dr2("姓名")
    If nm <> e.UserName Then '如果不是登录者本人
        e.Buddies.Add(nm)
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
kolen
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:677 积分:6228 威望:0 精华:0 注册:2012/1/20 17:53:00
  发帖心情 Post By:2016/1/21 17:37:00 [只看该作者]

对的,e.Buddies里面数据是哪个部门先加入,哪个部门先排,所以加入前,先把“用户”表,按照“部门”排序好就好了。
老师你太厉害了!图片点击可在新窗口打开查看
我测试一下,再汇报情况 。

 回到顶部