Windows窗体中多对多关系的数据输入

时间:2009-07-28 03:02:24

标签: c# winforms data-binding

我正在开发一个从非常基本的Lotus Notes数据库应用程序移植的Windows窗体应用程序。作为一个例子,有一个“作业”表,一个“部件”表和一个多对多的关系表“Job_Parts”与JobID和PartID。

当添加新的作业记录时,我需要一种输入方法供用户从部件列表中进行选择,我设想这是一个复选框列表,并允许用户快速检查作业中的部件。我在asp.net中做了类似的事情,并将复选框列表绑定到“Parts”表,然后捕获选择并将它们添加到新的多对多记录应该工作。在提取作业记录进行编辑时,我需要一些帮助,然后如何将多个关系记录中选择的部分记录绑定到复选框列表中。

与Lotus notes复选框列表控件相比,第二个请求可能不是可以在Windows窗体中匹配的内容。 在莲花笔记控件中,用户可以通过键入部件的前几个字母选择一个值,然后按下逗号允许他们开始键入下一个部分来轻松地使用复选框列表中的击键...依此类推。

有没有人见过这样的东西,或者用其他任何方式快速(用键盘)选择多对多的数据。

因为我要提交这个...我开始在问题中添加标签,并意识到这是完成我所需要的完美而快速的方法。有没有人在winforms中做过同样的事情,如果可以,你能给我一些指示吗?

3 个答案:

答案 0 :(得分:1)

不确定我是否可以口头描述,但这里有:

表单顶部是一个作业列表,可能是组合框或列表框,具体取决于您认为用户在作业之间导航的频率。

在其下方,左侧是所有可用部件的列表框。在右侧,是当前与作业关联的部件列表框。在这两个列表框之间,有一个“ ADD>> ”按钮和一个“<<<< REMOVE ”按钮。如果每个作业只允许一个部件,则可以在两个列表框之间移动部件:当用户添加部件时,它将从可用部件列表中删除并显示在作业部件列表中,并且如果用户删除部件,则反转。

此方法允许用户按住Control键并选择一次添加或删除多个部分。

希望有所帮助

答案 1 :(得分:0)

实现此目标的标准方法称为Master-Detail表单;如果你搜索这个,你会发现很多实现。

在您的情况下,将有一个主要的工作网格和第二个详细的零件网格,单击一个工作将显示所有部分。您可以使用标准的WinForms网格控件来添加,编辑和删除行。

如果您想允许键盘导航,您可以允许使用Tab键在网格之间切换,也可以使用箭头键在网格的行和列之间切换。

如果您想使用类似复选框的界面,可以列出每个作业的所有可能部件,并使用空格键检查所需的部件。

答案 2 :(得分:0)

我为种子测试公司工作,我们拥有相同的数据格式。这就是我们这样做的方式。

添加新职位:

我会为您的零件清单使用数据绑定列表框(使用BindingSource对象),并在顶部有一个过滤器框

---------------------
| Filter (Text Box) |
---------------------
| List Box          |
|                   |
|                   |
---------------------

然后,您可以使用BindingSource对象上的Filter属性来过滤列表框中显示的列表。然后我会在它附近有一个“添加”按钮,允许用户选择该部件并将其添加到包含所选部件的另一个列表框中。您可能更容易使用ListBox的DisplayMember和ValueMember属性来添加部件,因为索引对您没什么帮助,并且通常不值得比较字符串。

我认为此解决方案应该满足您的要求。