C# 以一种形式显示数据组的最佳方法?
我想创建一个windows窗体。这个表单是单独显示数据组的,我的目标是在同一个表单窗口中显示数据组,而不是打开多个窗口 例如,每组数据由一个作业#定义。用户将希望一次查看X个不同的作业(范围通常为1-5,但可能更多)。我希望每个作业有4个DataGridView,加上文本框中的各种识别和汇总数据 我正在研究使用TabPages/Tab控件。我最初的想法是让用户单击不同的选项卡,查看他们预先选择的作业的数据。然而,从我所看到的,这些选项卡的行为似乎不像类。有没有更好的方法来实现这一点,或者有什么方法让选项卡像类一样工作?这样每个选项卡都有一个作业文本框、4个不同的DataGridView等,这样我就可以轻松创建和显示任意数量的作业了 例如,每个选项卡将有4个DataGridView、8个文本框、标准化标签和标准化布局C# 以一种形式显示数据组的最佳方法?,c#,winforms,C#,Winforms,我想创建一个windows窗体。这个表单是单独显示数据组的,我的目标是在同一个表单窗口中显示数据组,而不是打开多个窗口 例如,每组数据由一个作业#定义。用户将希望一次查看X个不同的作业(范围通常为1-5,但可能更多)。我希望每个作业有4个DataGridView,加上文本框中的各种识别和汇总数据 我正在研究使用TabPages/Tab控件。我最初的想法是让用户单击不同的选项卡,查看他们预先选择的作业的数据。然而,从我所看到的,这些选项卡的行为似乎不像类。有没有更好的方法来实现这一点,或者有什么方
那么使用标签是个好主意吗?使用其他WinForm控件?这里至少有两种解决方案:
面板
,其中包含您想要的所有控件(TextBox
,DataGridView
,…),并对其进行设计,使其看起来最适合您。然后将每个面板
添加到选项卡控件
的每个选项卡页面
TabPage
,并将自定义TabPage
添加到TabControl.TabPages
中,而不是标准的TabPage
drag-n-drop
,您可能需要编写一个自定义TabControl
。所以第一种方法是可行的。您可以将面板
替换为表单
,设置表单.TopLevel=false
,您可以将该表单添加到任何容器控件中。使用表单
,您可以轻松地使用拖放
来设计和组织控件
下面是一些代码,可以帮助您了解:
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;
}
}
对于
UserControl
,您应该将类放在一个单独的*.cs文件中,编译您的项目,然后您可以在ToolBox
窗口(最顶部)中看到它。只需像其他控件一样拖放即可。我个人更喜欢网格细节视图。我们在软件中大量使用的东西。表单有一个垂直对齐的SplitContainer
在顶部面板中,添加某种类型的列表(ListBox、ListView、DataGridView
…任何可以加载列表然后对选择做出反应的控件)
在底部面板中,您还有更多选项。简单地说,您可以使用TableLayoutPanel
,然后设置行/列以提供您喜欢的嵌入式控件的任何排列,例如显示数据的网格阵列。我想根据您的模型,您将有一个列样式
和四(4)个行样式
。然后在每行中添加一个网格
这样,您可以将所有内容放在一个地方…一个“屏幕”,如果您愿意的话(无需翻页)。您可以对列表中的选择做出反应,以决定在网格中显示哪些数据。然后,您只需要一点代码(我希望是一个类),在提供数据的类和显示数据的表单控件(网格)之间建立接口
这里的另一个好处是,通过列表演示,您可以在任何时候拥有五(5)份以上的工作。事实上,通过滚动,您可以随心所欲地滚动(不限于显示进入pot之前的选项卡数量)
此外,您将重新使用网格。只需刷新所选列表项的显示数据。如果新鲜度不是问题,您甚至可以预加载并缓存所有内容
也可以考虑直接绑定到数据源,如果这是一个选项。
用户是如何询问这些工作的?有名单吗?他们在什么地方输入了一个数字?一旦他们选择了,他们能“结束”工作吗?也就是说,“打开的作业”列表是否需要动态更改,以便在作业来来去去时自动重新配置整体视图?他们会在零件号中打开搜索窗口类型以筛选出作业,然后选择他们想要查看的每个作业,可能需要双击。我必须将此信息发送回第一张表格。我不知道增加关闭工作的能力是否至关重要。可能只是为了重新开始而删除所有工作。不会动态添加和删除作业。您认为用户是否希望/需要一次查看多个作业。比如说,为了比较工作之间的数据?或者您打算像在您的模型中那样强制使用“一次一个作业”视图吗?不幸的是,一次查看多个作业不是很可行,因为一个表至少有11列。屏幕空间是一个问题。不过,添加摘要选项卡/控件可能是一个有趣的想法。嗯,好的,我正在查看面板。我想我可能需要学习如何单独使用代码添加控件才能工作。@Matt即使使用面板
,您也可能需要按代码添加控件,因为我们没有专门的面板
的设计图面
,我们只有一个用于表单
和用户控件
。我想你可以试试Form
,改为设置它的FormBorderStyle=FormBorderStyle.None
和Form.TopLevel=false
。然后,您可以将控件拖放到表单上,并使用此表单添加到选项卡
。此建议可能最终会解决一些物理问题