将数据从父表和子表加载到 DataGridView 的最简单方法,可以进行排序
Posted
技术标签:
【中文标题】将数据从父表和子表加载到 DataGridView 的最简单方法,可以进行排序【英文标题】:Simplest way to load data to DataGridView from parent and child table with possibility of sorting 【发布时间】:2022-01-06 14:43:44 【问题描述】:我使用 C# 和 EF 6.4,我正在为我的问题寻找干净且简单的解决方案。 我有这样的简单基础:
我想将数据加载到 DataGridView 看起来像这样:
我尝试了以下解决方案:
1
//sorting working, but doesn`t show columns "name" and "title"
Db.BooksAuthors.Include(x => x.Authors).Load();
DataGridView1.DataSource = Db.BooksAuthors.Local.ToBindingList;
2
//sorting not working, but shows columns "name" and "title"
public class BooksAuthorsView
public Int32 idBook get; set;
public Int32 idAuthor get; set;
public string BookTitle get; set;
public string AuthorName get; set;
private void Show()
var list = (from BA in Db.BooksAuthors
select new BooksAuthorsView() idBook = BA.idBook, idAuthor = BA.idAuthor, BookTitle = BA.Books.title, AuthorName = BA.Authors.name );
DataGridView1.DataSource = new BindingSource() DataSource = new BindingList<BooksAuthorsView>(list.ToList) ;
编辑: 我检查了这个solution。它有效,但它是最简单的解决方案吗?
【问题讨论】:
还要编辑/保存?还是只读的? 很好奇你是如何在不把 () 放在最后的情况下调用方法的;这段代码是从VB转换过来的吗? 我本来希望像DataGridView1.DataSource = Db.BooksAuthors.Select(BA => new BooksAuthorsView() idBook = BA.idBook, idAuthor = BA.idAuthor, BookTitle = BA.Books.title, AuthorName = BA.Authors.name ).ToList()
这样的东西可以正常工作,tbh
@Caius Jard 我只需要只读。是的,它是从VB转换而来的
【参考方案1】:
如果想通过点击列标题进行排序,可以参考以下代码:
public DataTable dvtodt(DataGridView dv)
DataTable dt = new DataTable();
DataColumn dc;
for (int i = 0; i < dv.Columns.Count; i++)
dc = new DataColumn();
dc.ColumnName = dv.Columns[i].HeaderText.ToString();
dt.Columns.Add(dc);
for (int j = 0; j < dv.Rows.Count; j++)
DataRow dr = dt.NewRow();
for (int x = 0; x < dv.Columns.Count; x++)
dr[x] = dv.Rows[j].Cells[x].Value;
dt.Rows.Add(dr);
return dt;
private int SortOrder_ = 0;
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
int nColumnIndex = e.ColumnIndex;
DataTable d = dvtodt(dataGridView1);
if (SortOrder_ == 0)
d.DefaultView.Sort = this.dataGridView1.Columns[nColumnIndex].Name + " ASC";
SortOrder_ = 1;
else if (SortOrder_ == 1)
d.DefaultView.Sort = this.dataGridView1.Columns[nColumnIndex].Name + " desc";
SortOrder_ = 0;
dataGridView1.Columns.Clear();
dataGridView1.DataSource = d;
【讨论】:
谢谢。但排序不起作用。当我点击标题栏时,什么也没有发生。 @CzarnyLewis,我编辑了我的答案。如果您有任何问题,请告诉我。以上是关于将数据从父表和子表加载到 DataGridView 的最简单方法,可以进行排序的主要内容,如果未能解决你的问题,请参考以下文章