
実現したいこと
①DataTableのDataGridViewの相互でバインドをする
②ボタンクリックでコンボボックス等の情報をDataTableにいれる。
③この時、DataTable.Row[0][0]が空白であれば、4列入力する。入れようとしている文字列と同じであれば[1][1]から3列いれる。入れようと文字列と違うのであれば、DataTableをクリアして新しくDataTable作りなおす。
前提
「コンボボックスとNumericUpDownに入れた数字をデータテーブルに入れる→データグリッドに表示させる」をボタンクリックで実現したいです。
発生している問題・エラーメッセージ
現状では、条件分の入力方法が分からないのと、ボタンクリックしても何も起きません。
エラーメッセージはありません。
該当のソースコード
VIsualStudio2022 C# .NET6 フォームデザイナーを用いています。
ソースコード
using System; using System.IO; using System.Windows.Forms; using System.Data; using System.Text; using System.Collections.Generic; using System.Security.Cryptography; using System.Data.OleDb; using System.Runtime.InteropServices.ComTypes; using System.Windows.Forms.VisualStyles; namespace recruitPGwork { public partial class LunchBoxMemoForm : Form { private const string NewLine = "\r\n"; private readonly DataTable dt; /// <summary> /// コンストラクタ /// </summary> public LunchBoxMemoForm() { InitializeComponent(); DataTable dt = new DataTable(); dt.TableName = "ItemList"; dt.Columns.Add("日付", typeof(string)); dt.Columns.Add("商品", typeof(string)); dt.Columns.Add("個数", typeof(int)); dt.Columns.Add("値段", typeof(int)); ItemListDataGridView.DataSource = dt; } // 合計金額を求める private void CalculateButton_Click(object sender, EventArgs e) { //DataTable作成 // 品物が選択されているか判定する if (string.IsNullOrWhiteSpace(ItemNameComboBox.Text)) { MessageBox.Show("品物を選択してください"); return; } // 個数に1以上の数値が入力されているかチェックする int count = (int)CountNumericUpDown.Value; if (count == 0) { MessageBox.Show("1つ以上の数字を入力してください"); return; } // 単価が入力されているかの確認 int ListPrice = (int)ListPriceNumericUpDown.Value; if (ListPrice == 0) { MessageBox.Show("単価を入力してください"); return; } // 今回の金額 var price = ListPrice * count; // 買い物リスト用の文字列を作成する var date = dateTimePicker.Value.ToLongDateString(); var item = ItemNameComboBox.Text; // 買い物リストに追加する if (0 == dt.Rows.Count) { DataRow row = dt.NewRow(); row["日付"] = date; row["商品"] = item; row["個数"] = count; row["値段"] = price; dt.Rows.Add(row); } else if (dt.Rows[0].Field<string>("日付") == date) { date = " "; DataRow row = dt.NewRow(); row["日付"] = date; row["商品"] = item; row["個数"] = count; row["値段"] = price; dt.Rows.Add(row); } else { dt.Clear(); DataRow row = dt.NewRow(); row["日付"] = date; row["商品"] = item; row["個数"] = count; row["値段"] = price; dt.Rows.Add(row); } // グラフ用の文字列を作成する string graphLine = new string('■', count); // グラフを表示する GraphTextBox.Text += graphLine + Environment.NewLine; // 合計金額を表示する _ = int.TryParse(TotalTextBox.Text, out int total); TotalTextBox.Text = $"{total + price}"; } /// <summary> /// 買い物リストをcsvファイルとして保存する /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SaveButton_Click(object sender, EventArgs e) { SaveFileDialog dlg = new SaveFileDialog { Title = "ファイルを保存する", FileName = @"ItemList.csv", Filter = "CSV(カンマ区切り)|*.csv" }; if (dlg.ShowDialog() == DialogResult.Cancel) { MessageBox.Show("キャンセルされました"); return; } using (StreamWriter writer = new StreamWriter(dlg.FileName, false, Encoding.GetEncoding("shift_jis"))) foreach (DataRow row in dt.Rows) { writer.WriteLine(string.Join(",", row.ItemArray)); } }
回答1件
あなたの回答
tips
プレビュー