TreeGridView(オープンソース)の使い方

このQ&Aのポイント
  • C# .NetでTreeGridViewというコントロールを使用したいが、Rowを追加する方法がわからない。
  • TreeGridViewはDataGridViewを拡張しており、Rows.Add()やDataSourceを使用することができないようだ。
  • 公開されているプログラムに詳しくないため、使い方についてわからない。
回答を見る
  • ベストアンサー

TreeGridView(オープンソース)の使い方

C# .Netですがこちらで質問させてください。 ネット上で公開されている、TreeGridViewというコントロールを使用したいと思っています。 いろいろ試したのですが、このコントロールにRowを追加する方法がわかりません。 ソースを確認したところ、TreeGridViewクラスはDataGridViewを拡張しているので、Rows.Add()やDataSourceを使用するのかとも思ったのですが、そのような関数は使用を禁止されているようです。 もしかして、これは便利に使用できるコントロールではなくて、DataGridViewの拡張howtoを公開してくれているだけなのでしょうか。(自分の使用方法に合わせてソースを書き変えなくてはいけない?) この手の公開されたプログラムについて詳しくないので、元のHPの英文を読んでも今ひとつ趣旨がつかめません。 何かご存知のかたがいたら、教えていただけないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

treeGridView1.Nodes.Addを使って行を追加していくように思いますが ・・・ DataBinding用の DataSourceやDataMemberなどはサポートしていません と記載されているようですよ 付属の『News Reader Look』のForm1_Shownイベントなどが参考になるかも ・・・ DataSourceなどを使ってコード記述を減らす方向ではないみたいですね DataSetなどを取得して 行ごとデータを objct配列などに取り込み Nodes.Addに渡して TreeGridViewの中身を構築するようですよ

simanoha
質問者

お礼

ありがとうございます! treeGridView1.Nodes.Addを使うことも考えていたのですが、 どうやってカラムやイメージや階層を扱うのかが見えてこなかったので苦労していました。 おっしゃるとおり、『News Reader Look』のForm1_Shownイベントを参考にして 切り貼りしていくと、具体的にどうしたらいいのかわかりました。 DataSourceを使えないのは残念ですが、TreeGridViewは見た目が良いので、 そのマイナスを補ってあまりありますね。 おかげさまで便利に使っていけそうです。

関連するQ&A

  • DataGridViewで教えてください。

    DataGridViewで教えてください。 VB初心者ですが どうかよろしくお願いいたします。 VB2005で DataGirdView(dgv1)の始めの行を 他のDataGridView(dgv2)に追加したいのですが、 うまくいきません。 どうすればよいのでしょうか? すみませんが、 教えてください。 よろしくお願いします。 Dim Table As DataTable Dim MainTable As DataTable Dim row As DataRow Table = DirectCast(dgv1.DataSource, DataTable) MainTable = DirectCast(dgv2.DataSource, DataTable) row = MainTable.NewRow row = Table.Rows(0) MainTable.Rows.Add(row)

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • [C#] DataGridViewでコンボボックスでの変更がdataTableに反映されません

    DataGridViewへのコンボボックス利用で躓いております。 DataGridViewのAutoGenerateColumnsをfalseにし、dataGridView.DataSourceにデータベースから読み込んだデータテーブルを指定しています。 次にdataGridViewにDataGridViewComboBoxColumnを追加し、DataPropertyNameにコンボボックスに対応させたい データテーブルのCaptionを指定することで、データテーブルとコンボボックスを関連付けています。 実行後の表示は想定通りなのですが、コンボボックスでアイテムを選択するとdataGridView上では値が更新されて、データテーブルには変更が反映されていません。 ちなみにコンボボックスでは、ValueMemberとDisplayMemberを設定し、DataGridView上ではstring、 内部的にはlongでデータ管理を行いたいと思っています。 どうにも解決方法が見いだせないので、こちらに質問させていただきました。 ソースを貼りつけるのでご指摘をお願いします。 利用しているデータベース |ID|ペットID| |1 |1| |2 |1| |3 |3| 以下ソースでは上記データベースのデータテーブルをpdtとしています。 コンボボックスのデータテーブル作成 DataTable comboTable = new DataTable(); comboTable.Columns.Add("ID", typeof(long)); comboTable.Columns.Add("NAME", typeof(string)); string[,] rowDataArray =      {{"1", "犬"},      {"2", "猫"},      {"3", "魚"}}; for(i=0;i<rowDataArray.GetLength(0);i++) {    DataRow row = comboTable.NewRow();    row["ID"] = rowDataArray[i, 0];    row["NAME"] = rowDataArray[i, 1];    comboTable.Rows.Add(row); } comboTable.AcceptChanges(); //コンボボックスを作成しコンボボックステーブルをバインド DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn(); cbc.DataSource = comboTable; cbc.DisplayMember = "NAME"; cbc.ValueMember = "ID"; cbc.DataPropertyName = pdt.ペットIDColumn.Caption; cbc.DisplayStyleForCurrentCellOnly = true; //dataGridViewにデータテーブルをバインド dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = pdt; dataGridView1.Columns.Add(cbc); これを実行すると |犬| |犬| |魚| とdataGridViewに表示され、コンボボックスでは、犬、猫、魚が選べます。 一行目において、コンボボックスから猫を選択するとdataGridViewは下記のようになるのですが |猫| |犬| |魚| この後ブレークよりデータテーブルとdataGridViewを見ると pdt[0][0] = 1 dataGridView1.Rows[0].Cells[0].Value = 2 となっており、dataGridViewの値は更新されているのに、データテーブルでは更新されていませんでした。 今まで、dataGridView上でダブルクリックし、値を直接書き換えていたらデータテーブルの値も更新されていたのですが、 コンボボックスを使うようにしたら更新されなくなりました。 皆様、解決方法を教えていただけますでしょうか。

  • .NETのGridViewでテストデータの投入方法

    Microsoft Visual Studio 2008を使用しています。 ASP.NETのGridViewで、データソースを使用せずにテストデータを投入する方法を教えて下さい。 情けないくらいの初心者です。どうか助けてください。 表示だけを確認して画面整形したいので、データ部に『12345』などのテストデータを投入して表示させたいのですが、そのやり方が分かりません。 GridView自体の設置と、列の追加までは出来ています。が、肝心のデータを入れられないためにプレビューしても真っ白になってしまいます。 検索して調べた結果、ダミーのデータテーブルを作成してバインドする方法があったのですが、それをどこに書けばいいのか、また、関数名??をどうしたらいいのかが分かりません。 失礼ながら拾ったソースをそのまま拝借すると… DataTable table = new DataTable(); table.Columns.Add("data1"); table.Columns.Add("data2"); DataRow row1= table.NewRow(); row1["data1"] = "value1-1"; row1["data2"] = "value1-2"; table.Rows.Add(row1); DataRow row2 = table.NewRow(); row2["data1"] = "value2-1"; row2["data2"] = "value2-2"; table.Rows.Add(row2); GridView1.DataSource = table; GridView1.DataBind(); これを、vbの方に記述すればいいのでしょうか? また、function名といいますか、sub名?をどうしたらいいのかがわかりません。。 デザイン画面上でダブルクリックして自動生成されるソースだと Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged End Sub になるので、ちょっと違う気がします・・。 上の拝借したソースよりも、もう少し分かりやすく記述していただけると大変嬉しいです・・。 本当に本当に初心者で申し訳ありません!!! とても困っているので、どうか助けてください、宜しくお願い致します!

  • Datatableへの代入

    環境はVS2005です。 以下のように読込んだデータをdatatblに格納し、 DataGridにバインドしたいのですが、コンパイルは通りますが、 エラーとなってしまいます。 どのように解決すればよいのでしょうか? DataTable tbl = new DataTable(); while (sqlDataReader.Read()) {   tbl.Rows.Add(sqlDataReader["banner_id"].ToString());  tbl.Rows.Add(sqlDataReader["Adv"].ToString()); } sqlDataReader.Close(); this.DataGridView.DataSource = tbl; this.DataGridView.DataBind(); エラーメッセージ:入力配列がこのテーブルの列数より長い値です すみませんが、よろしくお願い致します。

  • C# DataGridViewにデータを追加したい。

    C# DataGridViewにデータを追加したい。 DataGridViewにレコードを追加したいのですが、Formのロードイベントで以下コードを実行しています。 // テーブルを作成 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int)); DataColumn dataClumn2 = dataTable1.Columns.Add("名前", typeof(int)); // テーブルにデータを追加 dataTable1.Rows.Add(new Object[] { 1, name1}); dataTable1.Rows.Add(new Object[] { 2, name2}); dataGridView1.DataSource = dataTable1; としています。 Formにボタンを配置し、ボタンクリック時にテキストボックス[txtProName]のデータを レコード追加したいのですが、記入の仕方がわかりません。 まず、 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); をロードイベントメソッドに記入しているのも問題がありそうなのですが、 良く理解できません。 ボタンイベントでデータを挿入する方法等、記入方法のご教授よろしくお願いいたします。 当方、超初心者なので、出来れば、ソースコードもお願いいたします。m(_ _)m

  • 【C# DataGridViewについて】

    C#であるWindowsFormアプリケーションを作っているのですが imagelistに格納されている画像群をDataGridViewで表示しようと for (int y = 0; y < gy; ++y) { DataGridViewRow row = new DataGridViewRow(); for (int x = 0; x < gx; ++x) { DataGridViewImageCell imageCell = new DataGridViewImageCell(); imageCell.Value = imageList.Images[y * gx + x]; row.Cells.Add(imageCell); } dataGridView1.Rows.Add(row);//ここが問題 } としたところ、印をつけたところで、「System.InvalidOperationException」 なる例外が発生し、止まってしまいました。(デバッグで実行時) エラーの詳細を見ると、「空のDataGridViewに行を追加することはできません」 と書いてありました。 仕方なく列を追加する形にしようとしても、CellsがDataGridViewColumnにはないからImageCellをColumnにAddできないし、困っています。 どうすればよいでしょうか?

  • 【datagridview のDataSourceでdatagridv

    【datagridview のDataSourceでdatagridviewにデータを表示して、URLをハイパーリンクで表示する。】 いつもお世話にになります。 さて、DBにテーブルがあり、それにはひとつのカラムしかないと仮定します。そのカラムの内容はURL(例:http://www.okwave.jp)です。そのテーブルをDataSourceに設定してdatagridviewに表示する事はできました。しかし、このURLはハイパーリンクではないので、クリックしてもブラウザに自動的に表示されません。 どうにか、以下の方法で、セルの文字列ををハイパーリンクとして設定をする事ができましたが、どうやらこれの方法は新しくカラムを追加をしてしまうようです。(.addメソッドでカラムを追加してするようです。)自分が実現したいのでは、すでにあるカラムをハイパーリンクにしたいのです。 DataGridViewLinkColumn dgvlc1 = new DataGridViewLinkColumn(); dgvlc1.DataPropertyName = "link"; dgvlc1.HeaderText = "URL"; dgvlc1.Width = 400; dataGridView1.Columns.Add(dgvlc1); DataSourceを使ってdatagridviewにデータを表示した後、ハイパーリンクにする方法はあるのでしょうか? よろしくお願い致します。

  • DataGridViewに関して

    開発:Visual Basic 2008 考え方の質問になってしまうかもしれませんが教えて下さい。 Datagridviewを用いて、データの入力をさせたいと考えています。 但し、入力だけでなく画面にある表示ボタンを押した際には、テーブルに格納されている データを検索しに行き、その内容を表示させたいと考えています。 Datagridviewはフォームに貼り付け、各項目を一つずつ作成してあります。 しかし、この場合、以下のような記述をすると(そもそも記述が違うかと思われますが・・・)、 もともと作成してある項目(列)にデータがセットされず、新規で列を作ってしまいます。 《記述内容》 '変数の宣言 Dim dtSet As DataSet = New DataSet("PRODUCTS") Dim dtTable As DataTable 'データセットにテーブルを追加する dtTable = dtSet.Tables.Add("A_TBL") 'テーブルにフィールドを追加する '.Add("フィールド名", フィールドの型)で追加します dtTable.Columns.Add("AAA", Type.GetType("System.String")) Dim data_row As DataRow = dtTable.NewRow() data_row("AAA") = PIN_AAA dtTable.Rows.Add(data_row) 'DataGridにデータを表示する G_BBB.DataSource = dtSet.Tables(0) そもそもDatagridviewを用いて、入力や表示を行うにはどのような形にするのが 良いのでしょうか? Datasetとか使う? 教えて頂きたいと思います。 よろしくお願いします。

  • DataGridViewのコンボボックスについて

    開発環境:Visual Basic 2005 DataGridViewのDataGridViewTextBoxColumnの1行目をコンボボックスにして、 そのコンボボックスのドロップダウン幅を100に設定しようとしていますが、うまくいきません。 DataGridViewをフォームに貼り付け、以下のプログラムを実行すると、幅が120くらいになってしまいます。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Columns.Clear() DataGridView1.AllowUserToAddRows = False Dim TextColumn As New DataGridViewTextBoxColumn TextColumn.Name = "Name" TextColumn.Width = 100 Dim ComboColumn As New DataGridViewComboBoxColumn ComboColumn.Name = "Type" Dim List() As String = {"Type A", "Type B", "Type O"} ComboColumn.DataSource = List ComboColumn.DropDownWidth = 100 DataGridView1.Columns.Add(TextColumn) DataGridView1.Columns.Add(ComboColumn) For i As Integer = 1 To 5 DataGridView1.Rows.Add() Next Dim ComboCell As New DataGridViewComboBoxCell Dim NameList() As String = {"Name A", "Name B", "Name C"} ComboCell.DataSource = NameList ComboCell.DropDownWidth = 100 DataGridView1.Rows(0).Cells(0) = ComboCell End Sub どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。