【发布时间】:2022-07-06 19:58:59
【问题描述】:
我有以下课程:
public class TemplateTestLine
{
public int Id { get; set; }
public string Description { get; set; }
public string Hyperlink { get; set; }
public int NumOfReadings { get; set; }
public UnitOfMeasure UnitOfMeasure { get; set; } = new UnitOfMeasure();
public MethodOfInput MethodOfInput { get; set; } = new MethodOfInput();
public bool Alarm { get; set; }
public bool Signature { get; set; }
public List<TemplateReading> Readings { get; set; } = new List<TemplateReading>();
}
public class TemplateReading
{
public int Id { get; set; }
public int TestLineId { get; set; }
public int ReadingTypeId { get; set; }
public string Value { get; set; }
}
在我的数据库中,我有许多阅读类型,它们与ReadingTypeId 相关,就像这样...
Id Description
----------------
1 Distance Between Readings
2 Readings Target Min
3 Readings Target Max
4 Max Difference Between Readings
5 Tolerance Between Jumps
6 Straightness Max Difference Between Readings
7 Straightness Tolerance Between Jumps
8 Straightness Target Min
9 Straightness Target Max
10 Readings Tolerance Min
11 Readings Tolerance Max
12 Straightness Tolerance Min
13 Straightness Tolerance Max
要创建或编辑TemplateTestLine,我有一个带有输入(主要是文本框)的表单,我想将其绑定到传递给表单的TemplateTestLine 对象。因此,每个主要属性 7 个(使用“高级数据绑定编辑器”很容易绑定),加上 List<TemplateReading> 的 13 个文本框,就像这样......
所以我的问题是......
如何绑定表单上的读数文本框,以便当我将 TemplateTestLine 传递给表单时,List<TemplateReading> 使用 Value 属性填充其相关的 ReadingTypeId 文本框?
可以从“高级绑定编辑器”中完成,还是我需要忘记这一点并想出一个编码解决方案?
提前致谢。
【问题讨论】:
-
将列表中某个对象的属性绑定到相关文本框的
Text属性很简单(例如,[TextBox].DataBindings.Add("Text", [TemplateTestLine Instance].Readings.Single(r => r.ReadingTypeId == 1), "Value", false, DataSourceUpdateMode.OnPropertyChanged);)-- 问题:ID 的数量总是有限的吗?到 13 并且总是如此?您确定TemplateTestLine类中的所有属性都应该有一个public设置器吗?您是否对显示这些值的表单执行验证?该类本身似乎没有。 -
谢谢,这真的很有用,而且效果很好。有可能会有超过 13 个 ID,此时我需要在表单中添加额外的文本框(我不喜欢)。但是我想不出一种“动态”的方式来构建这个界面来满足这种可能性。任何想法/指导将不胜感激。
-
我可能会构建一些可折叠/可扩展的东西,即一个控件,它根据提交的内容定义其布局(类似于,例如,PropertyGrid)——您还可以将 UserControls 添加到一个 TableLayoutPanel(一些 UC 可能跨越多个列)。
-
再次感谢@Jimi,我会探索这些选项。
-
@Jimi 如果您想发表您的评论作为答案,我会接受。
标签: c# winforms user-interface data-binding binding