前提
C#でDataGridViewのXMLファイル読み込みと書き込みのコーディング途中
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- XMLをDataGridViewに読み込みをしたい(場所は自由に参照)
- XMLにDataGridViewのsource書き込みをしたい(場所は自由に参照)
本文
C#歴1週間です。
今回はアルコール量を検査して検査したデータを入力し、XML(CSVは諦めました)に書き込みんだり読み込みしてデータグリッドビューに反映させたいのですが、いくら探してもコンソールでの出力しかなく、データグリッドビューからの読み書きは検索しても出てきませんでした。
私の知識不足だと思いますがもしよければアドバイスしてくれると嬉しいです。
以下に試してみたソースコード一覧を貼り付けます。
該当のソースコード
C#
1 private void SAVEB_Click(object sender, EventArgs e) 2 { 3 4 // FileStream fs = new FileStream("rog.xml", FileMode.Open); 5 System.IO.StreamWriter sr = new System.IO.StreamWriter("rog.xml", false, System.Text.Encoding.GetEncoding("utf-8")); 6 dataSet.WriteXml(sr); 7 sr.Close(); 8 9 MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 10 Clear(); 11 }
全文ソースコード
把握用
このコードは経験ある人が見たらもっと短縮できそうだと思います。
C#
1using System; //アセンブリ参照 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Xml; 6using System.Drawing; 7using System.Linq; 8using System.Text; 9using System.Threading.Tasks; 10using System.Windows.Forms; 11using System.IO; 12using Microsoft.VisualBasic; 13using System.Data.OleDb; 14using System.Xml.Linq; 15using Microsoft.VisualBasic.FileIO; 16namespace sample 17{ 18 public partial class Form1 : Form 19 { 20 public Form1() //接続処理 21 { 22 InitializeComponent(); 23 try //接続処理 24 { // 接続を試みます 25 serialPort.PortName = ("COM5"); 26 serialPort.BaudRate = 9600; 27 serialPort.Open(); 28 } 29 catch 30 { 31 ; 32 } 33 34 } 35 private void Form1_Load_1(object sender, EventArgs e) //起動時XML初期読み込み まだ組み込まない 36 { 37 38 } 39 private void SeRe(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) //書き込み処理 40 { 41 try //書き込みを行います テキストボックス式 42 { 43 SetText(serialPort.ReadExisting()); 44 } 45 catch 46 { 47 ; 48 } 49 } 50 delegate void SetTextCallback(string text); 51 private void SetText(string text) //文章入力処理 52 { 53 if (TbxSeData.InvokeRequired) 54 { 55 SetTextCallback d = new SetTextCallback(SetText); 56 Invoke(d, new object[] { text }); 57 } 58 else 59 { 60 TbxSeData.AppendText(text); 61 62 } 63 } 64 private void BtSc_Click(object sender, EventArgs e) //スキャンボタン 65 { 66 if (string.IsNullOrEmpty(TbxSeData.Text)) //テキストボックスに行った文字列を解析し、処理したあとに変数にします。 67 { 68 MessageBox.Show("未スキャンです", "", MessageBoxButtons.OK, MessageBoxIcon.Error); //例外が起きたら弾きます 69 goto SCER; 70 } //文章解析処理 71 string txt = TbxSeData.Text; 72 string seta = txt.Remove(txt.IndexOf("mg/L")); 73 string setb = seta.Substring(seta.LastIndexOf(":")); 74 string ALs = setb.Remove(0, 1); 75 double ALi = double.Parse(ALs); 76 LaAlcohol.Text = ALs + ("mg/L"); 77 if (ALi >= 0.15) 78 { 79 this.TbClear.BackColor = Color.Red; 80 this.Scanbox.BackColor = Color.Red; 81 this.Scanbox.Text = "X"; 82 this.Scanbox.ForeColor = Color.White; 83 TbxResult.Text = "お酒を検出しました"; 84 } //0.15以上の処理 85 else 86 { 87 this.TbClear.BackColor = Color.Green; 88 this.Scanbox.BackColor = Color.Green; 89 this.Scanbox.Text = "O"; 90 this.Scanbox.ForeColor = Color.White; 91 TbxResult.Text = "お酒を検出しませんでした"; 92 } //0.15未満の処理 93 MessageBox.Show("正常にスキャンしました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 94 SCER: 95 ; 96 } 97 private void BtFIN_Click(object sender, EventArgs e) //終了ボタン 98 { 99 FIN(); 100 } 101 private void BtRe_Click(object sender, EventArgs e) //リセットボタン 102 { 103 Clear(); 104 MessageBox.Show("リセットしました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 105 } 106 private void BtSe_Click(object sender, EventArgs e) //入力用ボタン 107 { 108 Save(); 109 } 110 private void PictureBox2_Click(object sender, EventArgs e) //使い方ボタン 111 { 112 Form2 form2 = new Form2(); 113 form2.Show(); 114 } 115 private void PictureBox3_Click(object sender, EventArgs e) //管理用ボタン 116 { 117 Form3 form3 = new Form3(); 118 form3.Show(); 119 } 120 private void PictureBox4_Click(object sender, EventArgs e) //使い道ないボタン 無駄なので見なくていいです。 121 { 122 MessageBox.Show("おさけ", "おさーけ", MessageBoxButtons.OK, MessageBoxIcon.Information); 123 MessageBox.Show("アルコール量が0.15mg/Lを超えての運転は違法です", "飲酒運転の基準", MessageBoxButtons.OK, MessageBoxIcon.Error); 124 } 125 private void Form1_KeyPress(object sender, KeyPressEventArgs e) //キー入力系イベント 126 { 127 if (e.KeyChar == (char)Keys.Escape) //終了イベント ESCキー 128 { 129 FIN(); 130 } 131 } 132 private void Clear() //記録削除系イベント 133 { 134 LaAlcohol.Text = "アルコール量"; 135 TbxResult.Text = ""; 136 TbClear.BackColor = Color.White; 137 Scanbox.BackColor = Color.RoyalBlue; 138 Scanbox.ForeColor = Color.Snow; 139 Scanbox.Text = "?"; 140 TbxSeData.Text = ""; 141 } 142 private void Save() //保存系イベント 143 { 144 DateTime now = DateTime.Now; 145 if (NameCombo.Text == ("-名前を選択-")) 146 { 147 MessageBox.Show("名前が未入力です", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 148 goto SeER; 149 } 150 if (LaAlcohol.Text == ("アルコール量")) 151 { 152 MessageBox.Show("未スキャンです", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 153 goto SeER; 154 } 155 Xmlgrid.Rows.Add(now, NameCombo.Text, LaAlcohol.Text); 156 Clear(); 157 MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 158 SeER: 159 ; 160 } 161 private void FIN() //終了イベント 162 { 163 164 DialogResult result = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 165 if (result == System.Windows.Forms.DialogResult.Yes) 166 { 167 Application.Exit(); 168 } 169 } 170// ここから該当のソースコード 171 private void SAVEB_Click(object sender, EventArgs e) //XML書き込み エラー 172 { 173 // FileStream fs = new FileStream("rog.xml", FileMode.Open); 174 System.IO.StreamWriter sr = new System.IO.StreamWriter("rog.xml", false, System.Text.Encoding.GetEncoding("utf-8")); 175 dataSet.WriteXml(sr); 176 sr.Close(); 177 178 MessageBox.Show("正常に入力しました", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 179 Clear(); 180//該当ここまで 181 } 182 private void FINEX() //強制終了 未使用 183 { 184 Application.Exit(); 185 } 186 private void Label2_Click(object sender, EventArgs e) //デバッグ用 直接入力 187 { 188 TbxSeData.Text = ":0.00 mg/L" 189 } 190 191 private void Btload_Click(object sender, EventArgs e) //XML読み込み 192 { 193 194 } 195 } 196}
デザイン画像
各割り当て
飾りのオブジェクトなどは対象外です
オブジェクト名称 | プロパティの名称 | イベント名 | イベント名称 |
---|---|---|---|
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#
初めての質問投稿なのでこういう質問の書き方がいいなどのアドバイスもあると今後の書き込みの助けになります、もしよろしければお願いします。
読み込みはまた別の機会にコーディングしようと思います。


回答2件
あなたの回答
tips
プレビュー