【问题标题】:How can I bind a List<T> to relevant text boxes on a form?如何将 List<T> 绑定到表单上的相关文本框?
【发布时间】: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&lt;TemplateReading&gt; 的 13 个文本框,就像这样......

所以我的问题是......

如何绑定表单上的读数文本框,以便当我将 TemplateTestLine 传递给表单时,List&lt;TemplateReading&gt; 使用 Value 属性填充其相关的 ReadingTypeId 文本框?

可以从“高级绑定编辑器”中完成,还是我需要忘记这一点并想出一个编码解决方案?

提前致谢。

【问题讨论】:

  • 将列表中某个对象的属性绑定到相关文本框的Text 属性很简单(例如,[TextBox].DataBindings.Add("Text", [TemplateTestLine Instance].Readings.Single(r =&gt; 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


【解决方案1】:

为了结束这个问题,@Jimi 在 cmets 中的解决方案效果很好:

“将列表中的一个对象的属性绑定到相关文本框的文本属性很简单”

[TextBox].DataBindings.Add("Text", [TemplateTestLine Instance].Readings.Single(r =&gt; r.ReadingTypeId == 1), "Value", false, DataSourceUpdateMode.OnPropertyChanged);

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 2014-02-02
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多