C++/CLIでのDataGridViewの使い方

このQ&Aのポイント
  • C++/CLIでCSVファイルを読み込み、DataGridViewに表示する方法を教えてください。
  • C++/CLIのプログラムでCSVファイルを読み込んで、DataGridViewに表示させる方法を教えてください。
  • C++/CLIでDataGridViewを使用してCSVファイルの内容を表示する方法を教えてください。
回答を見る
  • ベストアンサー

C++/CLIでのDataGridViewの使い方

以前に質問させていただいたのですが、要点を得ていなかったため再度質問させていただいきます。 VC++2005のC++/CLIでプログラムを作成しています。 CSVファイルから内容を読み込み、DataGridVeiwに表示させたいと考えています。 CSVファイルを配列に読み込んで、表示するところまでは出来ています。 以下CSVファイルを読み込んで、コンソール出力するプログラムの一部 int i; StreamReader^ sr=gcnew StreamReader("hoge.csv"); String^ text=sr->ReadToEnd(); array<String^>^ line=text->Split(gcnew array<String^> {"\r\n", "\r", "\n"},StringSplitOptions::RemoveEmptyEntries); array<array<String^>^>^ table= gcnew array<array<String^>^>(line->Length); for (i=0; i<line->Length; i++) { table[i]=line[i]->Split(','); } for each (array<String^>^ output in table){ for(i=0; i<output->Length; i++){ Console::Write(output[i]); //行出力 } } 初歩的なことだとは思うのですが・・・ コンソール出力部分をDataGridViewで出力表示させるには どのように書けばいいでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

MSDNのサンプルです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview(VS.80).aspx rows->Add()のとこですね。 行単位で追加してるので、ちゃんと行が出来てるのが前提です。

chikamana
質問者

お礼

MSDNのサンプルは前から見ていたのですが、 焦りからか理解できずにいました。 この度改めて確認したらちゃんと表示させることができました。 #よく考えたらfor each内のifループも無しで動くんですね。。。 ありがとうございました!

関連するQ&A

  • [C++/CLI]マネージコードで配列を作成してネイティブコードの配列にコピーしたい

    Visual C++ 2005のC++/CLIでプログラム作成しています。 C言語で書かれたプログラムを組み込みたい為に、 マネージコードでテキストファイル読み込みをして、2次元配列に格納し、 int型に変換してネイティブコードの配列にコピーしたいのですが、上手く書けません。。 テキスト内容は数字のみで2次元に並んでおり、1文字ずつ配列に入れたいです。 エラー出ているのですが、下記にコードを載せます。 #include<string> #include<vcclr.h> using namespace System; using namespace System::IO; int main(void){ //ファイルオープン StreamReader^ sr = gcnew StreamReader("hoge.txt"); int x, y; //ファイルの内容読込み for(y=0;;y++){ String^ line = sr->ReadLine();   //データ末尾まで読み込んだらループ終了 if(line == nullptr) break;    array<array<String^>^>^ table = gcnew array<array<String^>^>(line->Length);    int X=line->Length;    int Y=table->Length; //読み込んだ内容を表示 Console::WriteLine("<System::String表示>" + table);    //System::Stringのline内容(文字列)をコピーする変数   char tmp[128];   sprintf(tmp,"%s",line);   printf_s("<char配列> tmp=%s\n",tmp); //char*変数の内容表示   array<array<int>^>^ data= gcnew array<array<int>^>(Y,X); //int型に変換 for(x=0;x<X;x++){data[y][x]=atoi(table[y][x]);} } //ファイルのクローズ sr->Close();      return 0; } 汚く読みづらいコードで大変申し訳ありません。。 元はdefineで成分数(X,Y)を宣言していました。 しかし、読み込むファイル内容によって変えたく、arrayでLengthを使いました。 またこれ以外でいい方法がございましたら、どうか教えてください。 どなたか、ご教授よろしくお願いします。

  • C++でのtxtファイル読み込みについて

    こんにちは。 C++でのtxtファイル読み込みについて質問させていただきます。 下記のようなコードを使ってtxtファイルを読み込もうとしています。 private: System::Void toolStripButton2_Click(System::Object^ sender, System::EventArgs^ e) { array<int>^ x=gcnew array<int>(103*300); array<int>^ y=gcnew array<int>(103*300); int num=int::Parse(numericUpDown4->Text); String^ fileName="outputx"+ num.ToString() +".txt"; String^ string1; StreamReader^ sreader1; StreamReader^ din = File::OpenText(fileName); array<String^>^ sub_string; //指定したファイル名でStreamReaderを設定する try{ sreader1=gcnew StreamReader(fileName); }catch(Exception^ ex){ MessageBox::Show("!"); return; } //x[i]の読み込み String^ str; int count = 0; while ((str = din->ReadLine()) != nullptr) { string1=sreader1->ReadLine(); //StreamReaderに1行読み込む sub_string=string1->Split(' '); //コンマで分割する x[count]=Convert::ToInt32(sub_string[1]); y[count]=Convert::ToInt32(sub_string[2]); count++; } Bitmap^ bmap_dst=gcnew Bitmap(104,301); for(int j=0;j<301;j++) for(int i=0;i<104;i++){ bmap_dst->SetPixel(i,j,Color::FromArgb(255,255,255));} for(int k=0;k<count;k++){ bmap_dst->SetPixel(x[k],y[k],Color::FromArgb(0,0,0));} pictureBox1->Image = bmap_dst; pictureBox2->Image = bmap_dst; //y座標 fileName="outputy"+ num.ToString() +".txt"; String^ string2; StreamReader^ sreader2; din = File::OpenText(fileName); array<String^>^ sub_string2; //指定したファイル名でStreamReaderを設定する try{ sreader2=gcnew StreamReader(fileName); }catch(Exception^ ex){ MessageBox::Show("!"); return; } //x[i]の読み込み String^ str2; count = 0; while ((str2 = din->ReadLine()) != nullptr) { string2=sreader2->ReadLine(); //StreamReaderに1行読み込む sub_string2=string2->Split(' '); //コンマで分割する x[count]=Convert::ToInt32(sub_string2[1]); y[count]=Convert::ToInt32(sub_string2[2]); count++; } Bitmap^ bmap_dst2=gcnew Bitmap(104,301); for(int j=0;j<301;j++) for(int i=0;i<104;i++){ bmap_dst2->SetPixel(i,j,Color::FromArgb(255,255,255));} for(int k=0;k<count;k++){ bmap_dst2->SetPixel(x[k],y[k],Color::FromArgb(0,0,0));} pictureBox3->Image = bmap_dst2; pictureBox4->Image = bmap_dst2; } また、読み込むtxtファイルは下記のようなものです。(長いので途中部分のみ)      1    287      1    288      2    107      2    108      2    109      2    110 これをビルドすると”入力文字列の形式が正しくありません”と出てしまいます。 また、下記のようなtxtファイルだと問題なく読み込むことができます。 9 164 9 165 9 166 10 151 10 152 10 153 10 154 プログラミングのどこがいけないのでしょうか? 説明不足かと思いますが、ご回答よろしくおねがいします。

  • C# datagridview

    いくつかこまごまとしたものをまとめてご質問させて頂きますが, 1)csvファイルを読込,ある処理を行おうとすると 「列の FillWeight 値の合計が 65535 を超えることはできません。」 というエラーが出て処理が出来ません.このエラーの解消法を教えて頂けないでしょうか? 2)画像のように読み込んだヘッダー部分が文字化けしてしまいます. こちらの解消法をご教授頂けないでしょうか? 3)csvのすべてのデータをdatagridviewに表示させたいのですが,2列分しか表示されません. 下記に2)とも関連したプログラムを記載いたします.どなたかご教授願えないでしょうか? string strName = "xxx.csv"; // 仮のファイル名 string strPath = "c:/csv/"; // 仮のディレクトリ名 OpenFileDialog sfd = new OpenFileDialog(); sfd.InitialDirectory = strPath; sfd.FileName = strName; sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt"; sfd.Title = "開くファイルを選択してください"; sfd.RestoreDirectory = true; sfd.CheckFileExists = false; if (sfd.ShowDialog() == DialogResult.OK) { // CSVファイルオープン System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName); // CSVファイルの各セルをDataGridViewに表示 int r = 0; String lin = ""; do { lin = sw.ReadLine(); if (lin != null) { if (r == 0) { dataGridView1.Columns.Add("clmName1", "日付"); this.dataGridView1.Columns.Add("Time", "データ"); } this.dataGridView1.Rows.Add(); String[] csv = lin.Split(','); for (int c = 0; c <= csv.GetLength(0) - 1; c++) { if (c < this.dataGridView1.Columns.Count) { this.dataGridView1.Rows[r].Cells[c].Value = csv[c]; } } r += 1; } } while (lin != null); // CSVファイルクローズ sw.Close(); tabControl1.SelectedIndex = 1; }

  • C# datagridview csv 読込

    datagridviewにcsvファイルを読み込んでいるのですが,csvファイル内の行列数分のみ列数・行数をdatagridviewに生成したいのですが,どうも必要以上の列数・行数を生成してしまいます. 下記にそのプログラムを記載いたします. どなたか,必要分のみするにはどうすればよろしいかご教授願えないでしょうか? private void button1_Click(object sender, EventArgs e) { string strName = "xxx.csv"; // 仮のファイル名 string strPath = "c:/csv/"; // 仮のディレクトリ名 OpenFileDialog sfd = new OpenFileDialog(); sfd.InitialDirectory = strPath; sfd.FileName = strName; sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt"; sfd.Title = "開くファイルを選択してください"; sfd.RestoreDirectory = true; sfd.CheckFileExists = false; if (sfd.ShowDialog() == DialogResult.OK) { // CSVファイルオープン System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName); // CSVファイルの各セルをDataGridViewに表示 int r = 0; String lin = ""; do { lin = sw.ReadLine(); if (lin != null) { dataGridView1.Columns.Add("clmName1", "日付"); this.dataGridView1.Columns.Add("Time","データ"); this.dataGridView1.Rows.Add(); String[] csv = lin.Split(','); for (int c = 0; c <= csv.GetLength(0) - 1; c++) { if (c < this.dataGridView1.Columns.Count) { this.dataGridView1.Rows[r].Cells[c].Value = csv[c]; } } r += 1; } } while (lin != null); // CSVファイルクローズ sw.Close(); }

  • jspでの二次元配列

    こんにちは。初めて質問させていただきます。よろしくお願いします。 現在javaで作ったプログラムをjspでも使えるようにしようと考えているのですが、 二次元配列がうまくjspで反映されず困っています。 jspに関してはほとんど無知で一から勉強している次第です。 そのためなるべく簡単に、と思い 以下のプログラムを、<% %>の間に入れるだけで動かせないかと思ったのですが エラーが出てしまいました。一次元の配列ならばできたのですが... ちなみに以下のプログラムはcsvファイルを読み込み、 多次元配列に格納していくというものです。 稚拙なプログラムで申し訳ありません... どなたかご教授いただければ幸いです。 import java.io.*; import java.util.StringTokenizer; import java.util.ArrayList; class Dog{  public static void main(String args[]) throws IOException{      String csv = "dognum.csv";      BufferedReader br = new BufferedReader(new FileReader(csv)); String[][] array = new String[100][]; int i = 0; while (true) { String line = br.readLine(); if(line==null) break; array[i] = line.split(","); i++; } for (i = 0; i < 101; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); } } } }

  • C# ジェネリックメソッドでCSVの読み込み

    以下のメソッドをジェネリックメソッドにしたいのですが、 Double.Parseメソッドの部分をどう変更したらいいのかわかりません。 どなたか方法を教えてください! //CSVデータをdouble配列に格納する public static void readCSV(double[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); a[i] = (Double.Parse(splittedResult[0])); i++; } } } //ジェネリックバージョン public static void readCSV<Type>(Type[] a, string filePath) { int i = 0; char delimiter = ','; //区切り文字はカンマ string line = ""; using (StreamReader r = new StreamReader(filePath)) { while ((line = r.ReadLine()) != null) // 1行ずつ読み出し。 { //分割した結果を文字列の配列で受け取る string[] splittedResult = line.Split(delimiter); //Double.ParseをTypeを用いてどう記述していいかわからない a[i] = (Double.Parse(splittedResult[0])); i++; } } }

  • C#でボタンのテキストに全角文字を表示する方法。

    N88-BASIC以来、プログラムには触れてなかったのですが、 かゆいところに手が届くソフトが欲しくてC#などに手を出してしまいました(^^;) はっきり言って基本がほとんど分かってない 初心者ですがよろしくお願いしますm(_ _)m 試行錯誤の上、CSVファイルから、2次元配列に読み込み、 ボタンやラベルのテキストに表示するところまではできたのですが、 CSVファイル内の全角文字が表示されません。 半角文字は問題なく表示されるのですが。。。 ご教授お願いいたしますm(_ _)m。 string[,] us1a; string tb1inf1; public void setting1_Click(object sender,System.EventArgs e) { Directory.SetCurrentDirectory(currentFolder); Directory.SetCurrentDirectory("usersetup"); const string filename1 = "us1.csv"; StreamReader sr; sr = File.OpenText(filename1); int us1y=0; us1a = new string [8,2]; while (sr.Peek() !=-1) { int us1x; string[] stringBuffer; string[] a; StreamReader reader = new StreamReader(filename1, System.Text.Encoding.GetEncoding("Shift-JIS")); stringBuffer = sr.ReadLine().Split(','); a = stringBuffer; for (us1x = 0 ; us1x < 2 ; us1x++) { us1a[us1y,us1x]=stringBuffer[us1x]; } us1y = us1y+1; } sr.Close(); tb1inf1 = us1a[0,0]; tn1.Text = tb1inf1; }

  • C#のプログラミングで困ってます。

    C#の事で質問です。プログラムが得意な方助けてください。 専門学生で、明日までの課題があるんですが非常に困ってます。 VisualStudio2008のWebフォームでコミュニティーみたいなものを作ろうとしています。 トップ画面のLabelに、トピック作成画面で書き込んだタイトルをリンクで表示(タイトルがTextBox1、内容がTextBox2)して、 そのリンクを押したら、タイトルに対しての内容の画面に飛ぶようなプログラムを作るところまではなんとかできました。 ・教えていただきたいこと 1、トップ画面のLabelに書き込まれたタイトルが5件だけ表示させたい 2、[次へ]ボタンを押したら6~11件を表示。それ以降11~16といったような形にしたい。 一応参考書を頼りに書いたコードです。 protected void Page_Load(object sender, EventArgs e) {  string[] msgtext;  string path = MapPath(".") + "\\community.txt";  int i = 0;  if (File.Exists(path)) {  StreamReader sr = new StreamReader(path, System.Text.Encoding.GetEncoding("sjis"));  while (sr.Peek() != -1) {  msgtext = sr.ReadLine().Split(',');  test += "<tr><td>" + msgtext[3] + "<a href =\"WebForm1.aspx?id=" + i + "\">" + msgtext[0];  i = i + 1; }  sr.Close(); }  Label1.Text += test + "</table>"; } protected.....ここから次へボタンを作りたい。 {  どうしたらいいのでしょう } 5件まで表示はfor文使うんだろうけど、どこに書いたらいいかもわかりません。 簡単でもいいのでコードなどを教えてください。 何卒お力添えお願いします。

  • 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。   すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream  (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr =   gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default);  while(sr->Peek() >= 0){ //csvデータ分繰り返し   strLine = sr->ReadLine(); //1行読み込み   strData = strLine->Split(delimiter); //「,」で区切って、配列に分解   if (iWorkNum == int::Parse(strData[0])){    strData[2] = strWorkTime;//書き換えたい箇所はここだけ    //※ここからの処理方法を教えて下さい。   }  } } sr->Close(); fs->Close();  

  • DataGridViewのComboBoxについて

    お世話になります。 現在、VB2008にて、 csvファイルの内容をDataGridViewに書き込むという プログラムの作成をしているのですが、 csvの中身を書き込むという作業はできるのですが、 ComboBoxの列のみ、値が書き込まれません。 csvの値は、DataGridViewのComboBoxのリストと同じ値を 入力しており、リスト以外の値が入力されている ということはありません。 Dim Items() As String '一行を, (カンマ)で区切って項目ごとに分解 Items = Line.Split(",") For n = 0 To Items.Length - 1 If Items(n).Replace("""", "") = Nothing Then Items(n) = "0" End If Next n 上記のコードで、 Items()という変数に、csvの値を格納し、 DataGridVIew1.Rows(0).Cells(0).Value = Items(0) という形で値を格納していますが、 どうしてもComboBoxの列のみ変化がありません。 どなたか、解決策もしくはComboBox列などに関する 情報などをご教授願えないでしょうか、 よろしくお願いします。

専門家に質問してみよう