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 方法并且不能设置当前。

简单示例:

projectsDictionary

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&lt;T&gt; 可能很有用,这样在第一个项目之前和最后一个项目之后返回 null

【讨论】:

对于一个列表,这是最好的解决方案。 如果当前不在集合中,则返回“之前”的最后一项。我最终使用了items.Contains(current) ? items.TakeWhile(x =&gt; x != current).LastOrDefault() : default(current); 或者,items.AsEnumerable().Reverse().SkipWhile(x =&gt; 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&lt;KeyValuePair&lt;K, V&gt;&gt;,至少有一个小论据可以说它们有某种顺序。无论如何,这是我的建议:

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# 项目自定义代码分析字典?

C# winform程序中 如何获取和设置dataGridView1的垂直滚动条当前位置?

VS2008如何将C#写的Winform程序打包成安装包?

C# winform 设计 如何相对居中

如何使用来自客户端 C# Winforms 的 asmx 服务 (BL) 的类函数