【问题标题】:How can I assign different elements in an array to different text boxes C#如何将数组中的不同元素分配给不同的文本框 C#
【发布时间】:2016-12-16 16:12:18
【问题描述】:

我有一个包含 100 个元素的数组,我想将其分配给 windows 窗体中的 100 个文本框。问题是数组没有以有用的方式排序,所以 for 循环不起作用。

我唯一能想到的就是编写 100 行代码,将正确的数组元素分配给正确的文本框,但这似乎是一种可怕的做法。

数组格式的简单示例如下:

10  Air Temperature #1,           1 Minute Run Average     Celsius  Minute 59-60
11  Humidity,                     1 Minute Run Average           %  Minute 59-60
12  Air Temperature #1,          60 Minute Run Average     Celsius  Minute 00-60
13  Air Temperature #1,      Max(1 Minute Run Average)     Celsius  Minute 00-60
14  Humidity,                Max(1 Minute Run Average)           %  Minute 00-60
15  Air Temperature #1,      Min(1 Minute Run Average)     Celsius  Minute 00-60
16  Humidity,                Min(1 Minute Run Average)           %  Minute 00-60

如您所见,Air Temperature 被拆分,数组的下方是 Air Temperature #2 值,但我希望所有温度数据放在一起。

【问题讨论】:

  • 我怀疑使用列表框或网格视图和排序方法可能会更好,但根据您对问题的描述,无法真正判断。你说“数组”,但我们不知道它是什么数组。字符串?或者文本框是否已经存在(或者您正在动态创建它们),或者它们是否具有与您要放入其中的数据相关的控件名称......
  • 您可以使用 linq OrderBy 通过指定要按var sorted = array.OrderBy(i => i.Substring(18)).ToList() 排序的子字符串以有用的方式对数组进行排序
  • 我通常会更改文本框的名称以使其有意义。在某些情况下,我创建一个 List 然后按您需要的顺序将文本框添加到列表中。 List 项的索引将是当前数组的索引号。

标签: c# arrays winforms


【解决方案1】:

创建一个在一个项目中代表您的数据的类

class MeasureData
{
    public int Id { get; set; }
    public string Description { get; set; }
    public string AverageData { get; set; }
    public string Unit { get; set; }
    public string Minutes{ get; set; }
}

使用DataGridView 控件代替文本框。
创建数据集合并将集合作为DataSource 添加到DataGridView

var data = new MeasureData[]
{
    new MeasureData
    {
        Id = 10,
        Description = "Air Temperature #1",
        AverageData = "1 Minute Run Average",
        Unit = "Celsius",
        Minutes = "Minute 59-60"
    },
    new MeasureData
    {
        Id = 11,
        Description = "Humidity",
        AverageData = "1 Minute Run Average",
        Unit = "%",
        Minutes = "Minute 59-60"
    }
    // and so on
};

myDataGridView.DataSource = data;

如果您想在添加到 DataGridView 之前对数据进行排序,请使用 LINQ 对其进行排序

var sortedData = data.OrderBy(item => item.Id).ToArray();

DataGridView 将为数组中的每个项目生成行,并为 MeasureData 类中的每个属性生成列。
如果您只想显示部分属性,请使用DataGridViewColumn.DataPropertyName = "NameOfThePropertyYouWantToShow" 手动创建列并记住设置DataGridView.AutoGenerateColumns = false,因为默认情况下它是true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多