以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  openQQ的聊天窗口的用户分组,组如何排序?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80385)

--  作者:kolen
--  发布时间:2016/1/21 16:49:00
--  openQQ的聊天窗口的用户分组,组如何排序?
openQQ的聊天窗口的用户分组,组如何排序?
测试了一下,按照A-Z也是不对的,如图,应该怎么设置,请老师指
导一下,谢谢!

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

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

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

--  作者:kolen
--  发布时间: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
--  发布时间: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编辑过]

--  作者:大红袍
--  发布时间:2016/1/21 17:14:00
--  

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

 

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


--  作者:kolen
--  发布时间:2016/1/21 17:22:00
--  
 红袍老师:你的意思是e.Buddies.Add(nm),排序根据nm数据加入e.Buddies的先后顺序吗?我怎么调整好呢?不是很明白,
这里的_identify是哪个表的主键列呢?


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

--  作者:大红袍
--  发布时间: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
--  发布时间:2016/1/21 17:37:00
--  
对的,e.Buddies里面数据是哪个部门先加入,哪个部门先排,所以加入前,先把“用户”表,按照“部门”排序好就好了。
老师你太厉害了!图片点击可在新窗口打开查看
我测试一下,再汇报情况 。