我有一個Windows窗體應用程序與DataSet
。我簡單地使用了Data |添加新數據源以將羅斯文數據庫的產品表添加到我的數據源,並創建一個顯示產品表內容的DataGridView
。我只是將Products表從Data Sources窗口拖到表單中,所有列都是自動創建的。如何根據DataPropertyName列訪問DataRowView中的單元格?
現在,我希望包含產品的行的Discontinued列爲true,以不同的顏色繪製。我爲它創建了一個CellPainting
事件處理程序,但我在查找Discontinued列的值時遇到了問題。
因爲DataGridView
被自動創建,在它的列都有名稱,像dataGridViewTextBoxColumn1
,其中有「產品ID」的DataPropertyName
。
我的問題是:如何根據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
「停產」的價值呢?
解決方案
基於尼爾·巴恩韋爾的答案,這似乎是一種方式。
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上的實際列。
那麼,這是相當有點鑄造發生。首先必須將DataGridViewRow轉換爲DataRowView,然後將其Row屬性轉換爲所需的DataRow類型,這太糟糕了。但無論如何,你的帖子肯定幫了我。我會將我的C#實現添加到我的答案中,並將答案標記爲答案。 – comecme 2011-01-25 12:07:07
很高興幫助。演員的需要是一種恥辱,但據我所知,這是必要的。當然你可以通過緩存等優化它,但實質上這是要採取的方法。 – 2011-01-25 12:16:40