从数据表配置动态列
本文关键字:动态 配置 数据表 | 更新日期: 2023-09-27 18:30:40
我正在创建一个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?
是的,它可以优化,你真的不需要内部 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;
最后这就是
解决它的方法。动态显示列并显示其中的值。
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;
}