[英]How to multiply cells in a row, gridview
當我單擊一個按鈕時,我想將單元格連續相乘,然后 output 將結果放入另一個單元格,但對每一行單獨執行,我現在擁有的代碼
foreach (DataGridViewRow Column in dataGridView1.Rows)
{
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
if (dataGridView1.Rows[i].Cells[2].Value == null)
{
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value));
}
else
{
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Discount"].Index].Value)) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value);
}
}
}
問題是,如果一個單元格在任何行上顯示 null 而不是對所有行運行此代碼
Column.Cells[dataGridView1.Columns["FinalPrice"].Index].Value = (Convert.ToDouble(Column.Cells[dataGridView1.Columns["Price"].Index].Value) * Convert.ToDouble(Column.Cells[dataGridView1.Columns["Amount"].Index].Value));
不是一個直接的答案,而是應該消除這個和類似問題的替代方法。
另一種方法是從實際計算中提取 UI 邏輯
創建一個 class 來表示行中的數據
public class Purchase
{
public string Item { get; set; }
public int Amount { get; set; }
public decimal Price { get; set; }
public decimal? Discount { get; set; }
public decimal FinalPrice = Price * Amount * Discount.GetValueOrDefault(1.0m);
}
要在 DataGridView 中顯示購買,您只需要一行代碼
var purchases = LoadPurchasesFromDatabase();
dataGridView.DataSource = purchases;
Purchase
class 實例中的值更改將自動更新 DataGridView。
如果您需要支持從集合中添加和刪除購買,則需要將購買集合設為BindingList<Purchase>
類型
通過從 UI 代碼中提取購買邏輯,您可以擺脫繁瑣和冗余的轉換、列和 datagridview 行循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.