私はDataSet
のWindowsフォームアプリケーションを持っています。私は単純にデータ|新しいデータソースを追加してNorthwindデータベースのProductsテーブルをデータソースに追加し、Productsテーブルの内容を示すDataGridView
を作成しました。私は、ProductsテーブルをData Sourcesウィンドウからフォームにドラッグするだけで、すべてのカラムが自動的に作成されます。列DataPropertyNameに基づいてDataRowView内のセルにアクセスする方法?
ここで、Discontinued列が真である製品を含む行を別の色で塗りたいとします。 CellPainting
イベントハンドラを作成しましたが、Discontinuedカラムの値を見つけるのに問題があります。
DataGridView
が自動的に作成されるため、その列の名前はのようになり、DataPropertyName
は「ProductID」です。
私の質問は、DataPropertyName
に基づいて製造中止の値を知る方法はありますか?または、列自体の名前を使用する必要がありますか?
(私は良くそれを意味のある名前を付けた場合には)私のコードは次のとおりです。
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#の実装を自分のAnswerに追加し、あなたの答えを答えとしてマークします。 – comecme
喜んで助けました。キャストの必要性は残念ですが、私が作ることができる限り、それは必要です。もちろん、キャッシングなどで最適化することもできますが、基本的にはこれを行う方法です。 –