Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > DataTableHelp > 数据处理 >
GetDictionary

GetDictionary从DataTableHelp数据中,从指定两列中,获取不重复的字典 。我们可以指定返回字典的Key、Value的数据类型。

语法:

GetDictionary<TKey,TValue>(ColumnNames,Filter,Sort)

参数说明

名称 说明
ColumnNames 必填项,字符串类型,列名称,从此列中提取不重复的值。
Filter 可选参数,指定一个条件表达式,只返回符合此条件的值。
Sort 可选参数,指定排序列,如果省略,则根据取值列排序,通常无需设置。

订单状态表中数据如下:

Vb.Net
Dim db As Database=Proj.SysDataFactory("UserDB")
'先获取DataTableHelp数据
Dim dt As DataTableHelp=db.ExecuteDataTableHelp("select * from 订单状态")
'获取字典
Dim dic As Dictionary(Of Integer,String)=dt.GetDictionary(Of Integer,String)("状态ID,状态名","","状态ID")
'遍历字典并显示
For Each item As KeyValuePair(Of Integer,String)In dic
    Proj.MsgDebug.Add(item.Key.ToString()+"|"+item.Value)
Next

'返回结果:1|待收货
'返回结果:2|已部分收货
'返回结果:3|完结

C#
Database db = Proj.SysDataFactory["UserDB"];
// 先获取DataTableHelp数据
DataTableHelp dt = db.ExecuteDataTableHelp("select * from 订单状态");
// 获取字典
Dictionary<int, string> dic = dt.GetDictionary<int, string>("状态ID,状态名", "", "状态ID");
// 遍历字典并显示
foreach (KeyValuePair<int, string> item in dic)
{
    Proj.MsgDebug.Add(item.Key.ToString() + "|" + item.Value);
}

//返回结果:1|待收货
//返回结果:2|已部分收货
//返回结果:3|完结

我们知道获取单列不重复值使用GetUniqueValues,获取两列不重复值用GetDictionary,那么获取两列以上的多列不重复值用什么方法呢?我们可以考虑用DataView.ToTable方法。

Vb.Net
Dim db As Database=Proj.SysDataFactory("UserDB")
'先获取DataTableHelp数据
Dim dt As DataTableHelp=db.ExecuteDataTableHelp("select * from 订单信息")
Proj.MsgDebug.Add("总数据共{0}条:",dt.DataRows.Count)
'获取字典
Dim dtResult As DataTableHelp=dt.DataView.ToTable(True,"产品,客户,业务员".Split(",")).GetDataTableHelp()
Proj.MsgDebug.Add("不重复数据共{0}条:",dtResult.DataRows.Count)
If dtResult IsNot Nothing AndAlso dtResult.DataRows.Count>0 Then
    '重新按产品,客户,业务员排序后遍历
    For Each dr As RowData In dtResult.Select("","产品,客户,业务员")
        Proj.MsgDebug.Add(dr("产品").ToString()+"|"+dr("客户").ToString()+"|"+dr("业务员").ToString())
    Next
End If
'返回结果:总数据共2003条:
'返回结果:不重复数据共125条:
'返回结果:产品01|客户01|业务员01
'返回结果:产品01|客户01|业务员02
'返回结果:产品01|客户01|业务员03
'返回结果:产品01|客户01|业务员04
'返回结果:产品01|客户01|业务员05
'返回结果:产品01|客户02|业务员01
'返回结果:产品01|客户02|业务员02
'返回结果:产品01|客户02|业务员03
'返回结果:产品01|客户02|业务员04
'返回结果:产品01|客户02|业务员05
'……后面结果太多,就不全贴出来了

C#
Database db = Proj.SysDataFactory["UserDB"];
// 先获取DataTableHelp数据
DataTableHelp dt = db.ExecuteDataTableHelp("select * from 订单信息");
Proj.MsgDebug.Add("总数据共{0}条:", dt.DataRows.Count);
// 获取字典
DataTableHelp dtResult = dt.DataView.ToTable(true, "产品,客户,业务员".Split(',')).GetDataTableHelp();
Proj.MsgDebug.Add("不重复数据共{0}条:", dtResult.DataRows.Count);
if (dtResult != null && dtResult.DataRows.Count > 0)
{
    // 重新按产品,客户,业务员排序后遍历
    foreach (RowData dr in dtResult.Select("", "产品,客户,业务员"))
    {
        Proj.MsgDebug.Add(dr["产品"].ToString() + "|" + dr["客户"].ToString() + "|" + dr["业务员"].ToString());
    }
}
// 返回结果:总数据共2003条:
// 返回结果:不重复数据共125条:
// 返回结果:产品01|客户01|业务员01
// 返回结果:产品01|客户01|业务员02
// 返回结果:产品01|客户01|业务员03
// 返回结果:产品01|客户01|业务员04
// 返回结果:产品01|客户01|业务员05
// 返回结果:产品01|客户02|业务员01
// 返回结果:产品01|客户02|业务员02
// 返回结果:产品01|客户02|业务员03
// 返回结果:产品01|客户02|业务员04
// 返回结果:产品01|客户02|业务员05
// ……后面结果太多,就不全贴出来了