前提
C#でDataGridViewのXMLファイル読み込みと書き込みのコーディング途中
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- XMLをDataGridViewに読み込みをしたい(場所は自由に参照)
- XMLにDataGridViewのsource書き込みをしたい(場所は自由に参照)
本文
C#歴1週間です。
今回はアルコール量を検査して検査したデータを入力し、XML(CSVは諦めました)に書き込みんだり読み込みしてデータグリッドビューに反映させたいのですが、いくら探してもコンソールでの出力しかなく、データグリッドビューからの読み書きは検索しても出てきませんでした。
私の知識不足だと思いますがもしよければアドバイスしてくれると嬉しいです。
以下に試してみたソースコード一覧を貼り付けます。
該当のソースコード
C#
private void SAVEB_Click(object sender, EventArgs e) { // FileStream fs = new FileStream("rog.xml", FileMode.Open); System.IO.StreamWriter sr = new System.IO.StreamWriter("rog.xml", false, System.Text.Encoding.GetEncoding("utf-8")); dataSet.WriteXml(sr); sr.Close(); MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); Clear(); }
全文ソースコード
把握用
このコードは経験ある人が見たらもっと短縮できそうだと思います。
C#
using System; //アセンブリ参照 using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Xml; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using Microsoft.VisualBasic; using System.Data.OleDb; using System.Xml.Linq; using Microsoft.VisualBasic.FileIO; namespace sample { public partial class Form1 : Form { public Form1() //接続処理 { InitializeComponent(); try //接続処理 { // 接続を試みます serialPort.PortName = ("COM5"); serialPort.BaudRate = 9600; serialPort.Open(); } catch { ; } } private void Form1_Load_1(object sender, EventArgs e) //起動時XML初期読み込み まだ組み込まない { } private void SeRe(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //書き込み処理 { try //書き込みを行います テキストボックス式 { SetText(serialPort.ReadExisting()); } catch { ; } } delegate void SetTextCallback(string text); private void SetText(string text) //文章入力処理 { if (TbxSeData.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); Invoke(d, new object[] { text }); } else { TbxSeData.AppendText(text); } } private void BtSc_Click(object sender, EventArgs e) //スキャンボタン { if (string.IsNullOrEmpty(TbxSeData.Text)) //テキストボックスに行った文字列を解析し、処理したあとに変数にします。 { MessageBox.Show("未スキャンです", "", MessageBoxButtons.OK, MessageBoxIcon.Error); //例外が起きたら弾きます goto SCER; } //文章解析処理 string txt = TbxSeData.Text; string seta = txt.Remove(txt.IndexOf("mg/L")); string setb = seta.Substring(seta.LastIndexOf(":")); string ALs = setb.Remove(0, 1); double ALi = double.Parse(ALs); LaAlcohol.Text = ALs + ("mg/L"); if (ALi >= 0.15) { this.TbClear.BackColor = Color.Red; this.Scanbox.BackColor = Color.Red; this.Scanbox.Text = "X"; this.Scanbox.ForeColor = Color.White; TbxResult.Text = "お酒を検出しました"; } //0.15以上の処理 else { this.TbClear.BackColor = Color.Green; this.Scanbox.BackColor = Color.Green; this.Scanbox.Text = "O"; this.Scanbox.ForeColor = Color.White; TbxResult.Text = "お酒を検出しませんでした"; } //0.15未満の処理 MessageBox.Show("正常にスキャンしました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); SCER: ; } private void BtFIN_Click(object sender, EventArgs e) //終了ボタン { FIN(); } private void BtRe_Click(object sender, EventArgs e) //リセットボタン { Clear(); MessageBox.Show("リセットしました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void BtSe_Click(object sender, EventArgs e) //入力用ボタン { Save(); } private void PictureBox2_Click(object sender, EventArgs e) //使い方ボタン { Form2 form2 = new Form2(); form2.Show(); } private void PictureBox3_Click(object sender, EventArgs e) //管理用ボタン { Form3 form3 = new Form3(); form3.Show(); } private void PictureBox4_Click(object sender, EventArgs e) //使い道ないボタン 無駄なので見なくていいです。 { MessageBox.Show("おさけ", "おさーけ", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("アルコール量が0.15mg/Lを超えての運転は違法です", "飲酒運転の基準", MessageBoxButtons.OK, MessageBoxIcon.Error); } private void Form1_KeyPress(object sender, KeyPressEventArgs e) //キー入力系イベント { if (e.KeyChar == (char)Keys.Escape) //終了イベント ESCキー { FIN(); } } private void Clear() //記録削除系イベント { LaAlcohol.Text = "アルコール量"; TbxResult.Text = ""; TbClear.BackColor = Color.White; Scanbox.BackColor = Color.RoyalBlue; Scanbox.ForeColor = Color.Snow; Scanbox.Text = "?"; TbxSeData.Text = ""; } private void Save() //保存系イベント { DateTime now = DateTime.Now; if (NameCombo.Text == ("-名前を選択-")) { MessageBox.Show("名前が未入力です", "", MessageBoxButtons.OK, MessageBoxIcon.Error); goto SeER; } if (LaAlcohol.Text == ("アルコール量")) { MessageBox.Show("未スキャンです", "", MessageBoxButtons.OK, MessageBoxIcon.Error); goto SeER; } Xmlgrid.Rows.Add(now, NameCombo.Text, LaAlcohol.Text); Clear(); MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); SeER: ; } private void FIN() //終了イベント { DialogResult result = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == System.Windows.Forms.DialogResult.Yes) { Application.Exit(); } } // ここから該当のソースコード private void SAVEB_Click(object sender, EventArgs e) //XML書き込み エラー { // FileStream fs = new FileStream("rog.xml", FileMode.Open); System.IO.StreamWriter sr = new System.IO.StreamWriter("rog.xml", false, System.Text.Encoding.GetEncoding("utf-8")); dataSet.WriteXml(sr); sr.Close(); MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); Clear(); //該当ここまで } private void FINEX() //強制終了 未使用 { Application.Exit(); } private void Label2_Click(object sender, EventArgs e) //デバッグ用 直接入力 { TbxSeData.Text = ":0.00 mg/L" } private void Btload_Click(object sender, EventArgs e) //XML読み込み { } } }
デザイン画像
各割り当て
飾りのオブジェクトなどは対象外です
オブジェクト名称 | プロパティの名称 | イベント名 | イベント名称 |
---|---|---|---|
Form | Form1 | Form1_Load_1 | Load |
DataGridView | Xmlgrid | -- | -- |
Button1 | BtScan | BtSc_Click | Click |
Button2 | BtFIN | BtFIN_Click | Click |
Button3 | BtReset | BtRe_Click | Click |
Button4 | BtSend | BtSe_Click | Click |
Button5 | Btload | Btload_Click | Click |
Button6 | BtSave | SAVEB_Click | Click |
Label1 | Scanbox | -- | -- |
Label2 | LaAlcohol | -- | -- |
Label3 | Lbstring_debug | Label2_click | Click |
Textbox1 | TbxResut | -- | -- |
Textbox2 | TbxSeData | -- | -- |
Textbox3 | TbClear | -- | -- |
Textbox4 | Passtext | -- | -- |
ComboBox | NameCombo | -- | -- |
PictureBox1 | boxOsake | PixtureBox4_Click | Click |
PictureBox2 | boxAdmin | PictureBox3_Click | Click |
PictureBox3 | boxQA | PictureBox2_Click | Click |
SerialPort | SerialPort | SeRe | DataReceived |
DataSet | dataSet | -- | -- |
試したこと
いろいろなウェブサイトを調べ、LINQやVBの組み込みなどしてみました。が、どれも合わず、知り合いのひとからコードを教えてもらい、このコードを組みました。
補足情報(FW/ツールのバージョンなど)
2022/04/28 現在
FW:.NET FrameWork 4.7.2
開発環境 MicrosoftVisualStudio Community ver.17.0.1
開発言語 C#
初めての質問投稿なのでこういう質問の書き方がいいなどのアドバイスもあると今後の書き込みの助けになります、もしよろしければお願いします。
読み込みはまた別の機会にコーディングしようと思います。
まだ回答がついていません
会員登録して回答してみよう