如何解决接收LINQ查询时,DataGridView的功能与GridView不同吗?
我在C#Visual Studio Web应用程序中具有以下代码:
SampleDataContext dbContext = new SampleDataContext();
gridView1.DataSource = from employee in dbContext.Employees
select employee;
此代码可以很好地在SQL数据库“示例”中显示表“ Employee”。
我想在Windows Form App中使用类似的代码,使用DataGridView元素而不是GridView元素:
SampleDataContext dbContext = new SampleDataContext();
dataGridView1.DataSource = from employee in dbContext.Employees
select employee;
此代码通常有效,但它还会显示一个额外的列,我相信是因为数据具有外键。每行都在名为“ [外键指向的表]”的额外列下显示“ [项目名称]。[外键指向的表]”。如何使该列不出现?
我是否必须将表加载到DataTable元素中,然后将其用作DataGridView元素的数据源?
解决方法
这里是一个示例,该示例使用lambda对抗Employee类,一个示例使用投影。顶部DataGridView对这个projection使用model。
投影
public class Employee
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public override string ToString() => $"{Title} {FirstName} {LastName}";
/// <summary>
/// This projection simplifies a lambda select
/// </summary>
public static Expression<Func<Employees,Employee>> Projection =>
employee => new Employee()
{
EmployeeId = employee.EmployeeId,FirstName = employee.FirstName,LastName = employee.LastName,Title = employee.Title
};
}
这些方法(位于this class中)读取数据,这些数据又将用于根据屏幕快照填充两个DataGridView控件。
public static async Task<List<Employee>> EmployeesProjected()
{
return await Task.Run(async () =>
{
List<Employee> customerItemsList = await Context.Employees
.Select(Employee.Projection)
.ToListAsync();
return customerItemsList;
});
}
public static List<Employees> Employees()
{
return Context.Employees.ToList();
}
这是表格代码
public partial class EmployeesForm : Form
{
public EmployeesForm()
{
InitializeComponent();
Shown += EmployeesForm_Shown;
}
private async void EmployeesForm_Shown(object sender,EventArgs e)
{
var employees = await Operations.EmployeesProjected();
EmployeeProjectedDataGridView.DataSource = employees;
EmployeeDataGridView.DataSource = Operations.Employees();
EmployeeDataGridView.Columns["Orders"].DisplayIndex = 4;
}
}
仅有的另一种选择是创建DataGridViewColumns并设置其DataPropertyName,然后不包括子表(也称为导航属性)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。