gpt4 book ai didi

c# - 如何在 C# 中将行筛选的 DataGridView 设置为 DataTable

转载 作者:行者123 更新时间:2023-11-30 16:52:58 27 4
gpt4 key购买 nike

我有 DataGridview,我过滤了其中的一些行,我需要将新数据源保存到新的 DataTable,由于某种原因我当前的代码不起作用,这里是我尝试转换它的方式。

(LogGridView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Type IN({0}) AND Date >= {1} AND Date <= {2} AND Content {3} '%{4}%'", typeFilter, startDate, endDate, likeQuery,keywordFilter.Text);
this.LogGridView.Sort(this.LogGridView.Columns[0], ListSortDirection.Ascending);
FilteredTable = LogGridView.DataSource as DataTable;

public DataTable FilteredTable
{
get;
set;
}

知道为什么它不起作用

谢谢

最佳答案

您在这里看到的是,在应用筛选器和排序后,源 DataTable 未更改,但 DataGridView 按预期显示。这是设计使然。所以调用:

FilteredTable =  LogGridView.DataSource as DataTable;

只需将 FilteredTable 设置为与原始表相同。

相反,我们将创建一个方法来:

  1. 创建一个包含相同列的新表。
  2. 使用与 DataGridView 排序相同的过滤字符串和等效排序字符串从原始表中选择行。
  3. 对于每个选定的行,克隆项目并将它们作为新行添加到新表中。
  4. 返回新表。

如图所示:

private DataTable CloneAlteredDataTableSource(DataGridView dgv)
{
DataTable dt = dgv.DataSource as DataTable;

if (dt == null)
{
return null;
}

DataTable clone = new DataTable();

foreach (DataColumn col in dt.Columns)
{
clone.Columns.Add(col.ColumnName, col.DataType);
}

string order = string.Empty;

switch (dgv.SortOrder)
{
case SortOrder.Ascending: order = "ASC"; break;
case SortOrder.Descending: order = "DESC"; break;
}

string sort = dgv.SortedColumn == null ? string.Empty : string.Format("{0} {1}", dgv.SortedColumn.Name, order);

DataRow[] rows = dt.Select(dt.DefaultView.RowFilter, sort);

foreach (DataRow row in rows)
{
object[] items = (object[])row.ItemArray.Clone();
clone.Rows.Add(items);
}

return clone;
}

和用法:

(this.LogGridView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Type IN({0}) AND Date >= {1} AND Date <= {2} AND Content {3} '%{4}%'", typeFilter, startDate, endDate, likeQuery,keywordFilter.Text);
this.LogGridView.Sort(this.LogGridView.Columns[0], ListSortDirection.Ascending);
this.FilteredTable = this.CloneAlteredDataTableSource(this.LogGridView);

关于c# - 如何在 C# 中将行筛选的 DataGridView 设置为 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com