以一种形式显示数据组的最佳方式?

时间:2013-08-13 16:59:31

标签: c# winforms

我希望创建一个Windows窗体。这个表单是分别显示数据组,我的目标是在同一个表单窗口中这样做,而不是打开多个窗口。

例如,每组数据都由Job#定义。用户希望一次查看X个不同的Job#(范围通常为1-5,但可能更多)。我希望每个Job#有4个dataGridViews,加上文本框中的各种识别和求和数据。 Initial Example Concept

我正在研究使用TabPages / Tab控件。我最初的想法是让用户单击不同的选项卡来查看他们预先选择的那些作业的数据。但是,这些选项卡看起来似乎不像我能看到的类。是否有更好的方法来实现这个或某种方式使标签像类一样?这样每个选项卡都有一个Job TextBox,4个不同的DataGridViews等。这样我就可以轻松创建和显示任意数量的工作?

例如,每个Tab都有4个dataGridViews,可能是8个文本框,标准化标签和标准化布局。

那么使用标签会是一个好主意吗?使用其他一些WinForm控件?

2 个答案:

答案 0 :(得分:0)

这里至少有两种解决方案:

  1. 创建一个自定义Panel,其中包含您想要的所有控件(TextBoxDataGridView,...),并将其设计为最适合您的。然后将Panel中的每一个添加到TabPage的{​​{1}}。

  2. 创建新的自定义TabControl并将自定义TabPage添加到TabPage而不是标准TabControl.TabPages

  3. 我认为如果您可以使用代码初始化所有内容(而不是通过拖放),可以完成第二种方法,因为要获得TabPage支持,您可能需要编写自定义drag-n-drop 。所以第一种方法是可行的,没问题。您可以将TabControl替换为Panel,设置Form,您可以将该表单添加到任何容器控件中。使用Form.TopLevel = false,您可以轻松Form设计和整理控件。

    这里有一些代码可以帮助你弄清楚:

    drag-n-drop

    考虑拖放要求,我认为使用public class TabPageClient : Form { public TabPageClient(){ InitializeComponent(); Dock = DockStyle.Fill; TopLevel = false; FormBorderStyle = FormBorderStyle.None; } //.... other code //I think this is important //You should define some Properties and methods to control the data flowing into and out from your TabPageClient. //You can also support some method to add/remove the controls dynamically. } 可能更好:

    UserControl

    对于public class TabPageClient : UserControl { public TabPageClient(){ InitializeComponent(); Dock = DockStyle.Fill; } } ,您应该将该类放在单独的* .cs文件中,编译您的项目,然后您可以在UserControl窗口(最顶层)中看到它。像其他控件一样拖放它。

答案 1 :(得分:0)

就个人而言,我更喜欢网格细节视图。我们在软件中大量使用的东西。表单垂直对齐SplitContainer

在顶部面板中,添加某种类型的列表(ListBox, ListView, DataGridView ...任何控件,您可以在其中加载列表,然后对选择作出反应)。

在底部面板中,您还有更多选项。简单地说,您可以使用TableLayoutPanel然后设置行/列来提供您喜欢的嵌入式控件的任何排列,例如显示数据的网格数组。我想,与你的模型一致,你有一个ColumnStyle和四个(4)RowStyles。然后在每一行中添加一个网格。

通过这种方式,您可以将它保存在一个地方......一个“屏幕”,如果您愿意(没有标签可以翻转)。您对列表中的选择做出反应,以决定在网格中显示哪些数据。然后,您只需要一些代码(我希望这个类)在提供数据的类和显示它的表单控件(网格)之间进行接口。

此处的另一个好处是,通过列表显示,您可以在任何时间玩五(5)个以上的工作。事实上,滚动,尽可能多的(不限于显示器进入底池之前的标签数量)。

此外,您将重新使用网格。只需刷新所选列表项的显示数据即可。如果新鲜度不是问题,您甚至可以预先加载并缓存它们。

如果这是一个选项,还可以考虑直接绑定到数据源。