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

GetDictionaryBySQL根据SQL语句返回一个字典。字典的Key、Value类型会根据SQL语句返回的字段类型而返回。这与GetDicOfColumnValue仅固定地返回一个Dictionary(Of String,String)类型的字典不同。这种特性在设置表中列的字典时非常有用。因为SmGrid.Cols("列名").DataMap中如果设置的字典中,Key的数据类型与列的数据类型不一致的话,就无法正确显示字典的值。

我们提供了两种重载,一个返回dynamic类型(在Vb.Net中类似于object),其实就是根据SQL语句返回字段类型返回相应Key、Value数据类型的字典。另外一个可以自己指定返回字典Key、Value数据类型。

语法:

GetDictionaryBySQL(sqlCmd) '返回一个dynamic类型,会根据SQL语句返回字段类型返回相应

GetDictionaryBySQL< TKey, TValue> (sqlCmd)  '返回一个泛型类型的字典,返回字典Key、Value数据类型直接自己指定。

参数名称  说明
 sqlCmd 字符类型,必填项。为要查询的SQL命令,该SQL必须返回2个字段的表。为字典的Key、Value值。

Vb.Net
Dim tbl As SmGrid=Proj.CurrentSmGrid
If tbl Is Nothing Then Return
    
Dim strSQL As String="Select DicKeys,DicValues From  SystemDictionary where ParentId=(Select DicID From  SystemDictionary Where DicValues='政治面貌' and IsGroupName=1)"
Dim dic As Object=tbl.DataTableHelp.Database.GetDictionaryBySQL(strSQL)
'将返回的字典用来设置列的字典
tbl.Cols("PoliticalStatus").DataMap=dic
Proj.MsgDebug.Add("不指定数据类型获得的字典类型:{0}",dic.GetType().ToString())

'这种方式可以进行简单的类型转换,比如字符转整数,整数转字符等操作
Dim dicP As Dictionary(Of Integer,String)=tbl.DataTableHelp.Database.GetDictionaryBySQL(Of Integer,String)(strSQL)
Proj.MsgDebug.Add("指定数据类型获得的字典类型:{0}",dicP.GetType().ToString())
For Each Item As KeyValuePair(Of Integer,String) In dicP
    Proj.MsgDebug.Add("Key:{0},Value:{1}",Item.Key,Item.Value)
Next

'类型转换一下
Dim dicNew As Dictionary(Of String,String)=dic
Proj.MsgDebug.Add("-----------分隔线------------")
For Each Item As KeyValuePair(Of String,String) In dicNew
    Proj.MsgDebug.Add("Key:{0},Value:{1}",Item.Key,Item.Value)
Next

'返回结果:不指定数据类型获得的字典类型:System.Collections.Generic.Dictionary`2[System.String,System.String]
'返回结果:指定数据类型获得的字典类型:System.Collections.Generic.Dictionary`2[System.Int32,System.String]
'返回结果:Key:1,Value:党员
'返回结果:Key:2,Value:团员
'返回结果:Key:3,Value:群众
'返回结果:-----------分隔线------------
'返回结果:Key:1,Value:党员
'返回结果:Key:2,Value:团员
'返回结果:Key:3,Value:群众

C#
SmGrid tbl = Proj.CurrentSmGrid;
if (tbl == null)
    return;

string strSQL = "Select DicKeys,DicValues From  SystemDictionary where ParentId=(Select DicID From  SystemDictionary Where DicValues='政治面貌' and IsGroupName=1)";
dynamic dic = tbl.DataTableHelp.Database.GetDictionaryBySQL(strSQL);
// 将返回的字典用来设置列的字典
tbl.Cols["PoliticalStatus"].DataMap = dic;
Proj.MsgDebug.Add("不指定数据类型获得的字典类型:{0}", dic.GetType().ToString());

// 这种方式可以进行简单的类型转换,比如字符转整数,整数转字符等操作
Dictionary<int, string> dicP = tbl.DataTableHelp.Database.GetDictionaryBySQL<int, string>(strSQL);
Proj.MsgDebug.Add("指定数据类型获得的字典类型:{0}", dicP.GetType().ToString());
foreach (KeyValuePair<int, string> Item in dicP)
    Proj.MsgDebug.Add("Key:{0},Value:{1}", Item.Key, Item.Value);

// 类型转换一下
Dictionary<string, string> dicNew = dic.CType<Dictionary<string, string>>();
Proj.MsgDebug.Add("-----------分隔线------------");
foreach (KeyValuePair<string, string> Item in dicNew)
    Proj.MsgDebug.Add("Key:{0},Value:{1}", Item.Key, Item.Value);
    
//返回结果:不指定数据类型获得的字典类型:System.Collections.Generic.Dictionary`2[System.String,System.String]
//返回结果:指定数据类型获得的字典类型:System.Collections.Generic.Dictionary`2[System.Int32,System.String]
//返回结果:Key:1,Value:党员
//返回结果:Key:2,Value:团员
//返回结果:Key:3,Value:群众
//返回结果:-----------分隔线------------
//返回结果:Key:1,Value:党员
//返回结果:Key:2,Value:团员
//返回结果:Key:3,Value:群众