質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

C#のDataGridViewによるXMLファイルの読み書き (書き込み編)

Reindeer_Csharp
Reindeer_Csharp

総合スコア2

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

2回答

0評価

1クリップ

262閲覧

投稿2022/04/28 07:09

編集2022/05/02 08:34

前提

 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読み込み { } } }

デザイン画像
イメージ説明
各割り当て
飾りのオブジェクトなどは対象外です

オブジェクト名称プロパティの名称イベント名イベント名称
FormForm1Form1_Load_1Load
DataGridViewXmlgrid----
Button1BtScanBtSc_ClickClick
Button2BtFINBtFIN_ClickClick
Button3BtResetBtRe_ClickClick
Button4BtSendBtSe_ClickClick
Button5BtloadBtload_ClickClick
Button6BtSaveSAVEB_ClickClick
Label1Scanbox----
Label2LaAlcohol----
Label3Lbstring_debugLabel2_clickClick
Textbox1TbxResut----
Textbox2TbxSeData----
Textbox3TbClear----
Textbox4Passtext----
ComboBoxNameCombo----
PictureBox1boxOsakePixtureBox4_ClickClick
PictureBox2boxAdminPictureBox3_ClickClick
PictureBox3boxQAPictureBox2_ClickClick
SerialPortSerialPortSeReDataReceived
DataSetdataSet----

試したこと

いろいろなウェブサイトを調べ、LINQやVBの組み込みなどしてみました。が、どれも合わず、知り合いのひとからコードを教えてもらい、このコードを組みました。

補足情報(FW/ツールのバージョンなど)

2022/04/28 現在
FW:.NET FrameWork 4.7.2
開発環境 MicrosoftVisualStudio Community  ver.17.0.1
開発言語 C#

初めての質問投稿なのでこういう質問の書き方がいいなどのアドバイスもあると今後の書き込みの助けになります、もしよろしければお願いします。

読み込みはまた別の機会にコーディングしようと思います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Reindeer_Csharp

2022/04/28 07:18

追記:本来はデバッグ用のグループボックスは見えないようになっています。
SurferOnWww

2022/04/30 02:01

その後がどうなりましたか? このスレッドの課題「DataGridViewによるXMLファイルの読み書き」が解決したらクローズしてください。解決してなくてまだ質問があるならそれを書いてください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。