gpt4 book ai didi

c# - 如何根据 DataPropertyName 列访问 DataRowView 中的单元格?

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:03 25 4
gpt4 key购买 nike

我有一个带有 DataSet 的 Windows 窗体应用程序。我只是使用了数据 |添加新数据源以将 Northwind 数据库的 Products 表添加到我的 DataSources 并创建一个显示 Products 表内容的 DataGridView。我只是将 Products 表从“数据源”窗口拖到表单中,因此所有列都是自动创建的。

现在,我希望将包含“已停产”列为真的产品的行涂成不同的颜色。我已经为它创建了一个 CellPainting 事件处理程序,但我无法找到 Discontinued 列的值。

因为 DataGridView 是自动创建的,其中的列的名称类似于 dataGridViewTextBoxColumn1,它的 DataPropertyName 为“ProductID”。

我的问题是:如何根据 DataPropertyName 找到 Discontinued 的值?或者我是否需要使用列本身的名称? (在这种情况下我最好给它起一个有意义的名字)

我的代码是:

private void productsDataGridView_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0)
{
var row = productsDataGridView.Rows[e.RowIndex];
if ((bool) (row.Cells[ nameOrIndexOfColumn ].Value))
{
e.CellStyle.ForeColor = Color.DarkGray;
}
}
}

如何访问带有 DataPropertyName“Discontinued”的列的值?


解决方案

根据 Neil Barnwell 的回答,这似乎是一种方式。

private void productsDataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0)
{
var productView = (DataRowView) productsDataGridView.Rows[e.RowIndex].DataBoundItem;
var product = productView.Row as NorthwindDataSet.ProductsRow;
if (product != null && product.Discontinued)
{
e.CellStyle.ForeColor = Color.DarkGray;
}
}
}

这样做的最大优势是 Discontinued 值不必是 DataGridView 上的实际列。

最佳答案

不要从网格中的列中获取值,而是从填充网格行的实际数据行中获取值。这样你就可以避免所有的魔术弦等。

因为 [Type]DataRow 隐藏在附加到网格的 DataView 中,所以需要进行一些转换,但这是一种更优雅的方法(并且在未来发生变化的情况下远没有那么脆弱)如果你将它很好地集成到你的代码中而不是依赖魔术字符串。

这是我的一篇旧博客文章,详细描述了如何做:

http://koder.wordpress.com/2010/04/09/getting-data-from-a-winforms-datagridview/

更新
您已经提到您正在使用 Northwind 并且您“只是将 Products 表拖到表单中”,所以我猜这不是一个关键任务软件,而是为了其他人的利益阅读,我只是想建议在实际应用中这不再是典型的方法。

通常这些天我们会考虑有一个 Domain Model ,也许使用 ORM从数据存储中获取我们的域对象(当然数据集不是真正的 ORM),然后可能使用类似 MVVM 的东西构建优化的数据结构以绑定(bind)到来自这些域对象的 UI 元素。

使用这种方法,因为您有实际数据要提交给 ViewModel,所以您可以根据实际数据计算颜色等规则,UI 仅显示应用这些业务规则的结果。

关于c# - 如何根据 DataPropertyName 列访问 DataRowView 中的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793100/

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