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

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

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

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

DataGrid

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

C#

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

Q&A

解決済

1回答

9845閲覧

C# DataGridViewについて

hiziki

総合スコア54

XML

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

DataGrid

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

C#

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

0グッド

0クリップ

投稿2016/08/18 12:27

###前提・実現したいこと
C#で「ボタンをクリックすると、XMLの内容をDataGridView」に表示するプログラムを作りました。

しかし、ボタンを何回もクリックすると、XMLの内容がいくつも「DataGridView」に表示されてしまいます。

この問題を解決するためにはどのようにしたらよいのでしょうか?

###試してみた構文とその結果
1(現在の構文):dataGridView1.Columns.Clear();

上の構文ですと、二回目以降クリックすると表示されない

2(試してみた構文):dataGridView1.Rows.Clear();

ArgumentException はハンドルされませんでした。 型 'System.ArgumentException' のハンドルされていない例外が System.Data.dll で発生しました 追加情報:この一覧をクリアできません。 というエラーが表示されました

###該当のソースコード
※ XMLは、DataSetで読み込んでます

XML

1//test.xml 2<?xml version="1.0" encoding="utf-8" ?> 3<test_Table> 4 <test> 5 <番号>01</番号> 6 <名前>○○ 太郎</名前> 7 </test> 8 <test> 9 <注文番号>02</注文番号> 10 <曲名>×× 花子</曲名> 11 </test> 12</test_Table>

DataSetのプロパティ(イベントは未記入です)

(ApplicationSettings):(未記入) (Name):test DataSetName:testdataset EnforceConstraonts:True GenerateMember:True Locale:日本語(日本) Modifiers:Private Namespace:(未記入) Prefix:(未記入) Relations:(コレクション) RemotingFormat:Xml Tables:(コレクション)

Form1.csの構文(抜粋)

//form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Net; using System.IO; using System.Diagnostics; namespace DateGridViewテスト { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; } private void button1ToolStripMenuItem_Click(object sender, EventArgs e) { dataGridView1.Columns.Clear(); string FPtest = "test.xml"; test.ReadXml(FPtest); dataGridView1.DataSource = test; dataGridView1.DataMember = "test"; }

###開発環境等
OS:Windows10
ソフト:Microsoft Visual Studio2015
言語:Windows Form アプリケーション(C#)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DataSetをDataGridViewのデータソースとしてバインドしています。
ファイルを読み込むにあたってDataSetをクリアしていないので、データソースたるDataSetの方に内容が増えている状態ですね。

DataSetの宣言部分がないのでうまくいくかわかりませんが、たぶん

csharp

1 private void button1ToolStripMenuItem_Click(object sender, EventArgs e) { 2 // dataGridView1.Columns.Clear(); 3 string FPtest = "test.xml"; 4 5 dataGridView1.DataSource = null; // 不要かも 6 test=new DataSet(); 7 test.ReadXml(FPtest); 8 dataGridView1.DataSource = test;

dataGridView1.Columns.Clear(); とは、表示コントロールである、DataGridViewの列を消しています。
これによって、データが列にバインドされても、表示すべき列はクリアされているので何も表示されないという事が起きています。
(DataSet test にはデータは追加されています)

感覚としてはテキストボックスを非表示にしても、テキストは見えないだけで存在しますし、テキストを変更してもテキストボックスは現れてこない(表示状態にはならない)。そんな状態です。

投稿2016/08/18 13:02

flied_onion

総合スコア2604

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiziki

2016/08/18 13:17

ご回答ありがとうございました。こちらの環境では、↑の構文ではうまくできなかったのですが、 test=new DataSet(); を sting FPtest = "test.xml"; の前に持って来たら動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問