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 |
|
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:群众 |