如何重构一些 DataGridViews 列的编程构建?

问题描述

我正在尝试构建一些数据网格视图。我目前正在使用下面显示代码。我想知道是否有更有效的方法来构建列。我试过这个方法 post,但似乎无法让它工作。有人有什么建议吗?

        DataGridView hire = form1.hireDataGridView;
        hire.ColumnCount = 6;
        hire.Columns[0].Name = "Name";
        hire.Columns[1].Name = "Type";
        hire.Columns[2].Name = "Date";
        hire.Columns[3].Name = "Cost";
        hire.Columns[4].Name = "Start Date";
        hire.Columns[5].Name = "End Date";

        DataGridView service = form1.serviceDataGridView;
        service.ColumnCount = 5;
        service.Columns[0].Name = "Name";
        service.Columns[1].Name = "Type";
        service.Columns[2].Name = "Date";
        service.Columns[3].Name = "Cost";
        service.Columns[4].Name = "Description";

        DataGridView relocate = form1.relocationDataGridView;
        relocate.ColumnCount = 9;
        relocate.Columns[0].Name = "Name";
        relocate.Columns[1].Name = "Type";
        relocate.Columns[2].Name = "Date";
        relocate.Columns[3].Name = "Cost";
        relocate.Columns[4].Name = "dist";
        relocate.Columns[5].Name = "latA";
        relocate.Columns[6].Name = "longA";
        relocate.Columns[7].Name = "latB";
        relocate.Columns[8].Name = "longB";

解决方法

您可以创建一个字典,其中包含每个网格的列名称:

using System.Collections.Generic;

private Dictionary<DataGridView,string[]> GridsSettings;

private void InitializeGridsSettings()
{
  if ( GridsSettings != null) return;
  GridsSettings = new Dictionary<DataGridView,string[]>
  {
    [hireDataGridView] = new string[]
    { "Name","Type","Date","Cost","Start Date","End Date" },[serviceDataGridView] = new string[]
    { "Name","Description" },[relocationDataGridView] = new string[]
    { "Name","dist","latA","longA","latB","longB" },};
}

然后就可以动态生成了:

  InitializeGridsSettings(); // Called from constructor for example

  foreach ( var grid in GridsSettings)
  {
    grid.Key.ColumnCount = grid.Value.Length;
    int indexColumn = 0;
    foreach ( string name in grid.Value )
      grid.Key.Columns[indexColumn++].Name = name;
  }

您也可以使用每个网格具有名称和类型的表格:

GridsSettings = new Dictionary<DataGridView,List<(string,Type)>>
{
  [hireDataGridView] = new List<(string,Type)>
  { ("Name",typeof(string)) },[serviceDataGridView] = new List<(string,[relocationDataGridView] = new List<(string,};

foreach ( var grid in GridsSettings)
{
  grid.Key.ColumnCount = grid.Value.Count;
  int indexColumn = 0;
  foreach ( var column in grid.Value )
  {
    grid.Key.Columns[indexColumn].Name = column.Item1;
    grid.Key.Columns[indexColumn].ValueType = column.Item2;
    indexColumn++;
  }
}

数据绑定也可以用同样的方式来设置数据库字段或对象属性名称,以及任何合适的东西。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...