0

我正在创建一个 DataGridView 库,我在其中传递 DataTable 但不显示所有列,而是有一个配置列的选项并选择要在网格上显示的列。这是我的功能

public void ConfigureColumns(DataTable dataTable, params String[] columnNames)
{
  var _dataGridView = new DataGridView();
  var index = 0;
  foreach (DataColumn column in dataTable.Columns)
  {
     var colName = column.ColumnName;
     foreach (var newColumn in from columnName in columnNames
            where columnName == colName
            select new DataGridViewTextBoxColumn {Name = columnName, Visible = true})
     {
          _dataGridView.Columns.Insert(index, newColumn);
           index++;
      }
   }
}

我在这里使用了两次 foreach,我只是想知道是否有任何方法可以优化它,以及如何在这些列中显示 DataRows ?

4

2 回答 2

2

是的,它可以被优化,你真的不需要内部的 foreach 循环。使用更合适的数据结构(例如 HashSet),“if”语句就足够了。此外,您可以使用 Add 代替 Insert 方法,因此您不必创建和维护索引字段。

public void ConfigureColumns(DataTable dataTable, params String[] columnNames)
{
    var _dataGridView = new DataGridView();
    HashSet<String> columns = new HashSet<String>(columnNames);

    foreach (DataColumn column in dataTable.Columns)
    {
        var colName = column.ColumnName;
        if (columns.Contains(colName)) 
        {
            var newColumn = new DataGridViewTextBoxColumn() {Name = columnName, Visible = true};
            _dataGridView.Columns.Add(newColumn);
        }
    }
}

构建网格后,只需调用:

_dataGridView.AutoGenerateColumns = false; // As you want to display a subset of the columns
_dataGridView.DataSource = dataTable;
于 2013-09-08T22:47:33.303 回答
0

最后这就是解决它的方法。动态显示列并在其中显示值。

public void ConfigureColumns(DataTable dataTable, params String[] columnNames)
{
  var _dataGridView = new DataGridView();
  HashSet<String> columns = new HashSet<String>(columnNames);

  foreach (DataColumn column in dataTable.Columns)
  {
     var colName = column.ColumnName;
     if (columns.Contains(colName)) 
     {
         var newColumn = new DataGridViewTextBoxColumn() {Name = columnName, Visible = true};
    //    _dataGridView.Columns.Add(newColumn);
     }
  }

   var newTable = dataTable.DefaultView.ToTable(false, columnNames);
  _dataGridView.DataSource = newTable;
}
于 2013-09-15T11:26:43.580 回答