从LINQ加载DataGridView

问题描述 投票:0回答:1

我有一个带有DataGridViews的表单,其DataSource被设置为数据库的DataContext,以自动拉入信息并允许其被编辑。但是我需要从颜色表中的颜色id中显示一个颜色,对应一个颜色表中的颜色,我不知道如何实现这个功能,同时也允许它自动编辑和更新记录。

private dbCounterTopsDataContext dbContext = new dbCounterTopsDataContext();

private void FrmCurrentInventory_Load(object sender, EventArgs e)
{
    dataGridColors.DataSource = dbContext.Colors;
    dataGridBarTops.DataSource = dbContext.BarTops;
    dataGridKitchenTops.DataSource = dbContext.Kitchens;
    dataGridVanityTops.DataSource = dbContext.Vanities;
}

我也试过这样做,显示成功了,但是我已经不能直接从数据表格中更新了。

private void FrmCurrentInventory_Load(object sender, EventArgs e)
{
    dataGridColors.DataSource = dbContext.Colors.Select(o => new { ColorId = o.ColorID, Color = o.Color1 });
    dataGridBarTops.DataSource = dbContext.BarTops.Select(o => new { Color = o.Color.Color1, Length = o.Length, Width = o.Width });
    dataGridKitchenTops.DataSource = dbContext.Kitchens.Select(o => new { Color = o.Color.Color1, Length = o.Length }).ToList();
    dataGridVanityTops.DataSource = dbContext.Vanities;
}
c# winforms linq datagridview
1个回答
1
投票

SSS的评论中有一些很好的提示,也许最简单的方法是使用AutogenerateColumns来生成大部分的东西,然后为你的颜色添加一些组合框列。大概会是这样的。

dataGridColors.DataSource = 

dataGridBarTops.DataSource = dbContext.BarTops;
dataGridBarTops.AutogenerateColumns = false;
var c = new DataGridViewComboBoxColumn();
c.HeaderText = "Color";
c.DisplayMember = "Color1"; //name of property that says Blue in color entity
c.ValueMember = "ColorID"; //name of property that says 5 in color/entity
c.DataPropertyName = "BarTopColorId"; //name of property that says 5 in BARTOPS table/entity
c.DataSource = dbContext.Colors; //personally I would use a bindingSource here
dataGridBarTops.Columns.Add(cb);

我会把删除文本框的颜色列作为你的练习... 也许先把它留在里面,看看combo的效果如何。

颜色数据网格视图是用来编辑实际的颜色定义等。栏顶表中的组合框是用于选择不同的颜色,是针对单个栏顶的,如果你编辑颜色表,它将改变组合列表中的内容。如果你编辑颜色表,它将改变组合框列表中的内容。如果你选择一个新的组合值,它将改变bartop的颜色id(无论该属性被称为什么)值

注意不要编辑掉在bartops中使用的颜色ID--不要从颜色表中删除颜色Id 5,因为还有一个bartop在使用它。


我在这里写了一个关于绑定资源的评论。我从来没有将DGV直接绑定到LINQ实体列表上,我可能也不会这样做(部分原因是它要下载整个表,这可能是巨大的,部分原因是我的winforms数据集几乎完全是强类型的数据集),但你会发现它是有效的(也许你需要整个表,没有过滤)。然而,如果你开始看到奇怪的效果,比如在Colors datagridview中选择不同的行会导致所有的组合框改变值,那么通过bindingsource来绑定组合,这样他们就会有专门跟踪组合的 "当前项目 "的东西。

© www.soinside.com 2019 - 2024. All rights reserved.