[英]Compare old and new value in DataGridView cell
如何根據新單元格值是>還是<而不是當前/舊單元格值來更改DataGridView單元格前景色? 是否有一個事件在電流改變之前傳遞了新值,所以我可以比較它們?
數據從底層源更新,並可能由 BindingSource 綁定。
我遇到了類似的問題。 我通過使用CellValidating
事件解決了這個問題:
void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
var oldValue = dgv[e.ColumnIndex, e.RowIndex].Value;
var newValue = e.FormattedValue;
}
誠然,我只需要訪問舊值,不需要執行任何格式化。 不過,我確信您可以通過此事件處理程序應用格式。
private double CuerrLineQty;
private void GridTransaction_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (currOp != CurrentOperation.FillDone)
return;
CuerrLineQty = double.Parse(GridTransaction.Rows[e.RowIndex].Cells["DisplayQty"].Value.ToString());
CuerrLineQty = double.Parse(GridTransaction.Rows[e.RowIndex].Cells["DisplayQty"].FormattedValue.ToString());
在此處輸入圖像描述CuerrLineQty = double.Parse(GridTransaction.Rows[e.RowIndex].Cells["DisplayQty"].EditedFormattedValue.ToString());
}
塊引用
您可以將單元格的舊值存儲在變量中,根據結果比較和更改前景色,然后從變量中刪除舊值。
問候。
如果 DataGridView 控件的內部源是 DataTable,那么您可以使用 DataRowVersion 枚舉來利用舊版本的 DataRow。 請注意,我使用了 CellFormatting 事件。
例子:
private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// if NOT the DataGridView's new row
if (!this.dataGridView1.Rows[e.RowIndex].IsNewRow)
{
// if my desired column
if (e.ColumnIndex == 0)
{
TestDataSet.TestRow row;
row = (TestDataSet.TestRow)((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem).Row;
if (row.Column1, (int)row["Column1", DataRowVersion.Original]) > 0)
e.CellStyle.ForeColor = Color.Red;
}
}
}
您可能想查看DataGridView.CellValueChanged
事件 (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx)。
如果要在保存之前檢查值,請查看DataGridView.CurrentCellDirtyStateChanged
(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.