c# winform项目中,如何使用字典代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform项目中,如何使用字典代码?相关的知识,希望对你有一定的参考价值。
如,数据库中:性别字段,1为男,2为女,其它如:学历,表现为中文,数据库中存取的是对应的代码。
如何实现数据的绑定,存取,界面表现。
1、基于ACCESS,c# vs2008 ,不要求SQL的。
2、不使用JOIN多表连接字典表的方式实现。
3、不是SQL版的,即不需要SELECT CASE方式实现。
请各位大侠指点迷津。!!最好有源代码实例,越祥细越好!解决给分!
如不方便在此发布源码,请EMAIL dj2487@126.com
只要实现目的,愿意送出所有分数。
不好意思,没说清楚,在下做的是WINFORM项目。不是WEB版的,没人给答案吗?
那种没有什么变化的字典存在数据库内属于多余。可以直接写成枚举然后写一个类来将这个枚举转换为对象再做绑定,比如:
public enum Sex
man = 1,
woman = 2
hashtable.key = Sex.man
hashtable.value = "男";
这样就能够把hashtable绑定到控件上去了。
不知道这对你有没有帮助? 参考技术A 你可以写两个类,第一类是对于存储人的ID,用这个类来做字典的KEY
比如:People类
People id = new People("人员ID")
再写一个类是用于存储人的信息的,用这个类来做字典的数据(date)
PeopleDate date= new PeopleDate(id)
然后你就可以在字典表里这样存储:
HashTable Temp = new (id,date) 参考技术B 在绑定那里设置 打个比方 Eval("sex").ToString()=="1"?"男":"女"
这样就输出了中文了
还有一种方法就是在cs里面写个public 函数 打比方 public string GetSex(object obj) //判断返回就不写了。
然后在外面调用的时候这样子 GetSex(Eval("sex")) 参考技术C 可以使用枚举
public enum Gender:int
男=1,
女=2
这样(int)Gender.男就是1
Gender.男.ToString()就是“男” 参考技术D 我觉得应该抛弃winform,改用wpf
如何使用 Linq / C# 在字典中获取当前和当前之后的项目?
【中文标题】如何使用 Linq / C# 在字典中获取当前和当前之后的项目?【英文标题】:How to get the item before current and after current in a dictionary with Linq / C#? 【发布时间】:2011-05-19 01:48:40 【问题描述】:我有一个项目字典,如果我选择一个项目,那么我会给出一个选项,前一个和下一个。我添加了一个代码示例,但我希望有更好/更快的方法来做到这一点,例如500个项目。
可能有 LINQ 选项之类的吗?
我检查了 Enumerator 但它只有一个moveNext
方法并且不能设置当前。
简单示例:
projects
是 Dictionary
。
project
是存在于Dictionary
中的KeyValuePair
。
var match = false;
var save = new KeyValuePair<ExtendedProjectLightPlan, Page>();
var before = new KeyValuePair<ExtendedProjectLightPlan, Page>();
var after = new KeyValuePair<ExtendedProjectLightPlan, Page>();
foreach (var p in projects)
before = save;
save = p;
if (match)
after = p;
break;
if (p.Key.Id == project.Key.Id)
match = true;
【问题讨论】:
【参考方案1】:'current
'之前的项目:
items.TakeWhile(x => x != current).LastOrDefault();
“current
”之后的项目:
items.SkipWhile(x => x != current).Skip(1).FirstOrDefault();
适用于整数类型,但会在序列末尾返回default(T)
。将项目转换为 Nullable<T>
可能很有用,这样在第一个项目之前和最后一个项目之后返回 null
。
【讨论】:
对于一个列表,这是最好的解决方案。 如果当前不在集合中,则返回“之前”的最后一项。我最终使用了items.Contains(current) ? items.TakeWhile(x => x != current).LastOrDefault() : default(current);
或者,items.AsEnumerable().Reverse().SkipWhile(x => x != current).Skip(1).FirstOrDefault()
哈哈。 AsEnumerable()
是由于 ***.com/a/26241613【参考方案2】:
您是否尝试过使用IndexOf()
和ElementAt()
方法??
Int32 index = list1.IndexOf(item);
var itemPrev = list1.ElementAt(index - 1);
var itemNext = list1.ElementAt(index + 1);
【讨论】:
如果该项目是第一个元素,即在索引 0 或最后一个元素,则使用此代码您将得到一个异常。 @Marco:字典中的 before 和 after 是什么意思?你在使用SortedDictionary
吗?
我假设 OP 熟悉 IndexOutOfRangeException
!【参考方案3】:
LINQ 中没有内置任何东西来执行此操作,但您可以相当轻松地编写自己的...这是一个使用 .NET 4 中的Tuple
的实现。它将返回 n-2 项的序列,该序列最初具有 n项目 - 但您可以根据需要进行调整。
public IEnumerable<Tuple<T, T, T>> WithNextAndPrevious<T>
(this IEnumerable<T> source)
// Actually yield "the previous two" as well as the current one - this
// is easier to implement than "previous and next" but they're equivalent
using (IEnumerator<T> iterator = source.GetEnumerator())
if (!iterator.MoveNext())
yield break;
T lastButOne = iterator.Current;
if (!iterator.MoveNext())
yield break;
T previous = iterator.Current;
while (iterator.MoveNext())
T current = iterator.Current;
yield return Tuple.Create(lastButOne, previous, current);
lastButOne = previous;
previous = current;
请注意,根据 LukeH 的回答,字典是无序的……但希望以上内容对您有所帮助。
【讨论】:
【参考方案4】:字典没有内在的顺序,所以上一个和下一个项目的想法非常荒谬。
【讨论】:
【参考方案5】:我同意其他 cmets 关于在字典中排序的观点。但是由于字典提供IEnumerable<KeyValuePair<K, V>>
,至少有一个小论据可以说它们有某种顺序。无论如何,这是我的建议:
var ll = new LinkedList<ExtendedProjectLightPlan>();
var qs =
from p in projects
let node = ll.AddLast(p.Key)
select new Project = p, Node = node, ;
var lookup = qs.ToDictionary(q => q.Project, q => q.Node);
var current = (ExtendedProjectLightPlan)null; //Whatever the current one is.
var previous = lookup[current].Previous.Value;
var next = lookup[current].Next.Value;
这将使从任何项目转移到上一个或下一个项目变得非常简单——而且速度非常非常快。 (虽然速度应该不是问题,因为这是针对 UI 的,对吧?)
【讨论】:
以上是关于c# winform项目中,如何使用字典代码?的主要内容,如果未能解决你的问题,请参考以下文章
[CefSharp] 如何在JavaScript中调用C#代码
如何在 VS2010 Professional 中为 C# 项目自定义代码分析字典?