我正在使用C#,。Net 4.5,Entity Frameworks 6.1开发Windows窗体应用程序
我使用以下代码填充DataGridView控件。
var context = new MyVisionBidModelEntities();
bidItemMaterialBindingSource.DataSource =
context.BidItemMaterials.Where(c => c.BidItemID == selectedItem.BidItemID).ToList();
dataGridView1.DataSource = bidItemMaterialBindingSource;
然后我设置计算" TotalPrice"的值。列使用以下代码。
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => !row.IsNewRow))
{
CalculateTotalPrice(row);
}
private void CalculateTotalPrice(DataGridViewRow row)
{
object a = row.Cells[1].Value;
object b = row.Cells[2].Value;
object c = row.Cells[3].Value;
double aNumber = 0;
double bNumber = 0;
double cNumber = 0;
if (a != null)
aNumber = Double.Parse(a.ToString());
if (b != null)
bNumber = Double.Parse(b.ToString());
if (c != null)
cNumber = Double.Parse(c.ToString());
row.Cells["TotalPrice"].Value = aNumber * bNumber * cNumber;
row.Cells["TotalPrice"].ValueType = typeof(double);
}
当我最初查看DataGridView控件时,所有行和列都是可见的,但是,TotalPrice列具有空值。
当我重新执行上面的代码时,DataGridView现在具有TotalPrice值。
我已经尝试过做DataGridView.Refresh,DataGridView.Update等。但是不能让计算列最初显示出来。它在第二种涂料上工作正常。
我错过了什么吗?
答案 0 :(得分:1)
如果您的TotalPrice列未绑定,我会将其设为虚拟列,并在dataGrid的CellValueNeeded
事件中进行计算,否则在设置DataGrid的DataSource属性之前执行计算。根据用户使用网格的方式,您可能还需要更多细节,但这应该可以让您朝着正确的方向前进。
答案 1 :(得分:0)
在第一个画面上,所有行都是新行...考虑改变你的foreach语句。
根据其他人的要求,此处为您更改了代码/为您完成的工作:
更改此块:
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow>().Where(row => !row.IsNewRow))
{
CalculateTotalPrice(row);
}
而不是这个块:
foreach (DataGridViewRow row in dataGridView1.Rows)
{
CalculateTotalPrice(row);
}