• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VisualStudioのComboListについて)

VisualStudioのComboListについて

このQ&Aのポイント
  • VisualStudio2008を使っています。c1FlexGridのComboListについて分かる方がいらっしゃいましたらお願いします。
  • c1FlexGridで表を作りました。表の右から「コンボリスト、品名、数量、単価、合計」という列になっており、コンボリストには「通常、消費税」が選べるようになっています。通常を選んだ場合は、品名、数量、単価を入力し、合計の欄には自動で計算が入ります。消費税を選んだ場合は、それまで入力した通常の金額を足して、その合計金額の消費税が自動計算され、合計欄に入るようになっています。ここまでは問題ないのですが、金額を修正しても消費税の再計算がされない問題があります。また、通常の部分の金額を修正してから消費税を再計算する方法もわかりません。
  • どのようにすれば、金額が変わるたびに消費税を計算させることができるのでしょうか?お手数ですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんわ、Blackwinglsです。 > またコンボリストを「通常」に戻してから「消費税」を選びなおせば 新たに計算してくれるのですが・・・。 イベント毎にコードを書く必要があるのでは・・・? コンボリストが変化した時、数量が変化した時、単価が変化した時、金額が変化した時って感じで、です。 とりあえず、vs2003が手元にあったので参考のコードを記載します。 あまり考えずに作ったので、参考ってことで・・・(^^; //数量×単価の計算 private decimal Compute(int n, decimal m) { double r = Math.Floor((double)n * (double)m); return (decimal)r; } //消費税計算 private decimal Tax(C1FlexGrid Grid) { double r = 0; for(int i = 1; i < Grid.Rows.Count -1; i++) { if(Grid[i, 5] != null) { r = r + double.Parse(Grid[i, 5].ToString()); } } r = r * 0.05; return (decimal)r; } //消費税項目の確認 private int TaxExist(C1FlexGrid Grid) { for(int i = 1; i < Grid.Rows.Count; i++) { if(Grid.GetDataDisplay(i, 1) == "消費税") { System.Diagnostics.Debug.WriteLine(i); return i; } } return 0; } bool CodeProcess = true; private void Form1_Load(object sender, System.EventArgs e) { string[] ColumnNames = {"", "コンボリスト", "品名", "数量", "単価", "合計"}; Grid.Cols.Count = ColumnNames.Length; for (int i = 1; i <= Grid.Cols.Count -1; i++) { Grid[0, i] = ColumnNames[i]; Grid.Cols[i].TextAlignFixed = TextAlignEnum.CenterCenter; } Column Sector = Grid.Cols[0]; Sector.Width = 0; Column cmb = Grid.Cols[1]; cmb.DataType = typeof(String); cmb.ComboList = "通常|消費税"; Column ItemName = Grid.Cols[2]; ItemName.DataType = typeof(String); Column Amount = Grid.Cols[3]; Amount.DataType = typeof(Int32); Column BasePrice = Grid.Cols[4]; BasePrice.DataType = typeof(Decimal); Column Price = Grid.Cols[5]; Price.DataType = typeof(Decimal); Grid.Rows.Count = 10; CodeProcess = false; } private void Grid_CellChanged(object sender, C1.Win.C1FlexGrid.RowColEventArgs e) { if(CodeProcess) { return; } switch(e.Col) { case 1: if(Grid.GetDataDisplay(e.Row, 1) == "消費税") { Grid.Rows.Count = e.Row +1; Grid[e.Row, 5] = Tax(Grid); } if(Grid.GetDataDisplay(e.Row, 1) == "通常") { if(Grid[e.Row, 3] != null && Grid[e.Row, 4] != null) { Grid[e.Row, 5] = Compute((int)Grid[e.Row, 3], (decimal)Grid[e.Row, 4]); } } break; case 3: if(Grid.GetDataDisplay(e.Row, 1) == "通常" && Grid[e.Row, 3] != null && Grid[e.Row, 4] != null) { Grid[e.Row, 5] = Compute((int)Grid[e.Row, 3], (decimal)Grid[e.Row, 4]); } break; case 4: if(Grid.GetDataDisplay(e.Row, 1) == "通常" && Grid[e.Row, 3] != null && Grid[e.Row, 4] != null) { Grid[e.Row, 5] = Compute((int)Grid[e.Row, 3], (decimal)Grid[e.Row, 4]); } break; case 5: if(TaxExist(Grid) != 0) { Grid[TaxExist(Grid), 5] = Tax(Grid); } break; default: break; } } ではでは~☆ミ

noname#105044
質問者

お礼

ヒントだけでなくわざわざコードを記述していただきまして大変助かりました。 おかげさまで上手く動かすことができました! まだまだ始めたばかりでわからないことばかりですが頑張ります。 ありがとうございました。