C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Form1のテキストボックスの内容をForm2のDGVに

[トピック内 28 記事 (1 - 20 表示)]  << 0 | 1 >>

■89287 / inTopicNo.1)  Form1のテキストボックスの内容をForm2のDGVに
  
□投稿者/ VB.net初心者 (4回)-(2018/11/16(Fri) 17:29:00)

分類:[VB.NET/VB2005 以降] 

開発環境はVisualStudio2017、使用言語はVB.netです。

Form1のテキストボックスの内容をForm1のButton1をクリックしたときにForm2のDataGridViewに反映させたいです。
テキストボックスは3つあり、それぞれDGVのA列、B列、C列に当てはめたいです。

御力添えよろしくお願いします。
引用返信 編集キー/
■89288 / inTopicNo.2)  Re[1]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1662回)-(2018/11/16(Fri) 22:36:00)
No89287 (VB.net初心者 さん) に返信

どこまで自力で実装できていて、どこでつまづいているか、何が分かれば解決できるのか、
コードを示すなどして具体的に書くことはできませんか?

引用返信 編集キー/
■89289 / inTopicNo.3)  Re[2]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ VB.net???S?? (1回)-(2018/11/17(Sat) 16:09:57)
No89288 (WebSurfer さん) に返信
今は実験的にまず同一Formでできるか確認しています。

http://kchon.blog111.fc2.com/blog-entry-27.html
こちらを参考にして
Dim idx As Integer
DataGridView1.Rows.Add()
idx = DataGridView1.Rows.Count - 1
DataGridView1.Rows(idx).Cells(0).Value = TextBox1.Text
DataGridView1.Rows(idx).Cells(1).Value = TextBox2.Text
DataGridView1.Rows(idx).Cells(2).Value = TextBox3.Text

このコードを作ってみました。
このコードだと行を追加すると1行目が空白の行になって2行目に追加されます。
また、さらに追加すると2行目に入力されていたテキストが消えて空白の行になり3行目に新しいテキストが追加されます。

いま躓いているのは1行目から追加したい、さらにどんどん追加できるようにしたいの2点です。
最終的には別FormのDGVに追加したいと思います。
よろしくお願いします。
引用返信 編集キー/
■89290 / inTopicNo.4)  Re[3]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1663回)-(2018/11/18(Sun) 12:50:56)
No89289 (VB.net???S?? さん) に返信

「VB.net初心者」さん=「VB.net???S??」さんですよね?
日本語をハンドル名に使うと文字化けすることがあるそうですので注意してください。

List(Of T) 型のオブジェクトを作って、それを BindingSource 経由で DataGridView に表示し、
追加する際はテキストボックス入力から T 型のオブジェクトを作り、それを BindingSource.Insert
メソッドで追加するようにしてはいかがですか?

T 型というのは例えば以下のようなクラスです。

Public Class Item
Public Property A As String
Public Property B As String
Public Property C As String
End Class
引用返信 編集キー/
■89295 / inTopicNo.5)  Re[4]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ VB.net Biginner (1回)-(2018/11/19(Mon) 01:24:06)
No89290 (WebSurfer さん) に返信
> ■No89289 (VB.net???S?? さん) に返信
>
> 「VB.net初心者」さん=「VB.net???S??」さんですよね?
> 日本語をハンドル名に使うと文字化けすることがあるそうですので注意してください。
了解です。

返信ありがとうございます。
T型オブジェクトという用語を初めて聞いたのでご返信を参考に試行錯誤してみます!
引用返信 編集キー/
■89296 / inTopicNo.6)  Re[5]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1664回)-(2018/11/19(Mon) 08:37:11)
No89295 (VB.net Biginner さん) に返信

> T型オブジェクトという用語

List(Of T) でググってください。「T型オブジェクト」ではヒットしないと思います。
引用返信 編集キー/
■89326 / inTopicNo.7)  Re[6]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ VB.net Biginner (2回)-(2018/11/20(Tue) 14:12:19)
List(Of T)でやろうとしていたのですが、私の理解が及ばず結局
idx = DataGridView1.Rows.Count - 1 → idx = DataGridView1.Rows.Count - 2
に変更することで思っていた処理になりました。

あとはForm1のテキストボックスの内容をForm1のButton1をクリックしたときにForm2のDataGridViewに反映させたいです。
テキストボックスは3つあり、それぞれDGVのA列、B列、C列に当てはめる形にしたいです。

このコードで試してみましたが追加されませんでした。
Dim idx As Integer
Form2.DGV.Rows.Add()
idx = Form2.DGV.Rows.Count - 2
Form2.DGV.Rows(idx).Cells(0).Value = TextBox1.Text
Form2.DGV.Rows(idx).Cells(1).Value = Label1.Text
Form2.DGV.Rows(idx).Cells(2).Value = Label2.Text
引用返信 編集キー/
■89328 / inTopicNo.8)  Re[7]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1667回)-(2018/11/20(Tue) 14:36:26)
No89326 (VB.net Biginner さん) に返信
> List(Of T)でやろうとしていたのですが、私の理解が及ばず結局
> idx = DataGridView1.Rows.Count - 1 → idx = DataGridView1.Rows.Count - 2
> に変更することで思っていた処理になりました。

そういう方法は、すみませんが、自分としては考える気がおきません。

C# でですがサンプルを書いておきますので、これを見てどうするか考えていただくよう
お願いします。

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;

namespace WindowsFormsApplication1
{
    public partial class Form5 : Form
    {
        private DataGridView dataGridView1;
        private BindingSource bindingSource1;

        public Form5()
        {
            InitializeComponent();

            this.dataGridView1 = new DataGridView();
            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.bindingSource1 = new BindingSource();
            this.dataGridView1.DataSource = this.bindingSource1;
            this.Controls.Add(this.dataGridView1);

            List<Item> list = new List<Item>
            {
                new Item { A = "a1", B = "b1", C = "c1" },
                new Item { A = "a2", B = "b2", C = "c2" },
                new Item { A = "a3", B = "b3", C = "c3" }
            };

            this.bindingSource1.DataSource = list;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Item item = new Item { A = "a0", B = "b0", C = "c0" };
            this.bindingSource1.Insert(0, item);
        }
    }

    public class Item
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }
}

引用返信 編集キー/
■89329 / inTopicNo.9)  Re[7]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1668回)-(2018/11/20(Tue) 14:46:13)
No89326 (VB.net Biginner さん) に返信

【追伸】

C# が分からなければ C# ⇒ VB.NET 変換サービスを使ってください。

http://converter.telerik.com/

そのままコピペすれば使えるほど正確かどうかは分かりませんが、人が読んで
理解できる程度にはなります。
引用返信 編集キー/
■89339 / inTopicNo.10)  Re[8]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ リンクス (1回)-(2018/11/20(Tue) 16:22:42)
面倒なことを考えずに、

DataGridView1.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text)

でいいんじゃないの?

引用返信 編集キー/
■89375 / inTopicNo.11)  Re[8]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ VB.net Biginner (4回)-(2018/11/21(Wed) 17:11:27)
No89328 (WebSurfer さん) に返信
>
> そういう方法は、すみませんが、自分としては考える気がおきません。
>
> C# でですがサンプルを書いておきますので、これを見てどうするか考えていただくよう
> お願いします。

わざわざサンプルコードまで書いていただいてありがとうございます。
参考にしてチャレンジしてみました。
テキストボックスの内容をDGVに表示するところまではいけました。
しかし、DGV1にDGV2が重なって?表示されてうまくいきませんでした。
ですがList(Of T)については少し理解できたような気がします。

No89339 (リンクス さん) に返信
> 面倒なことを考えずに、
>
> DataGridView1.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text)
>
> でいいんじゃないの?
>
ご返信ありがとうございます。
このコードを元に別Formへの表示までいけました。

元の質問からは少しずれてしまいますが、私が最初に参考にしていたサイトのもの、List(Of T)を使用したもの、最後のシンプルなもので使用にあたるメリットデメリットはなにかありますか?
引用返信 編集キー/
■89376 / inTopicNo.12)  Re[9]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1674回)-(2018/11/21(Wed) 17:34:48)
No89375 (VB.net Biginner さん) に返信

> しかし、DGV1にDGV2が重なって?表示されてうまくいきませんでした。

何を言っているのか分かりません。

私の書いたサンプルコードには dataGridView1 しかありません。 質問者さんが何か手を加えたのだろうと
想像してますが、何をしたのかはここに書いてないので分かりません。


> 私が最初に参考にしていたサイトのもの、List(Of T)を使用したもの、最後のシンプルなもので使用に
> あたるメリットデメリットはなにかありますか?

DataGridView だけにデータを追加しても意味がないのでは? 私が紹介したコードの通りにすれば、
List<Item> list に追加され、それが DataGridView に表示されるようになります。なので、追加
作業の完了後 list に全てのデータがあり、それを利用できます。

それが、DataGridView の使い方のあるべき姿だと自分は思います。

もっと言えば、型付 DataSet / DataTable + DataAdapter と組み合わせて、SQL Server などの DB の
テーブルのレコード一覧の表示、編集を行い、編集結果を DB に書き戻すための UI に使うのが本来の
姿だと思います。

以下の図のような構成です。

Windows フォーム アプリケーションでのデータへの接続
https://msdn.microsoft.com/ja-jp/library/wxt2cwcc(v=vs.120).aspx

DataGridView は、その図で言うと Form1 の部分で、UI としてユーザーの編集操作を DataSet / DataTable
に反映するのに使うだけです。

コードで TextBox からユーザー入力を DataGridView に反映するなんてことは、自分的にはあり得ません。


引用返信 編集キー/
■89377 / inTopicNo.13)  Re[9]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ PANG2 (247回)-(2018/11/21(Wed) 17:39:56)
他のスレッドでの私の投稿です。参考にしてください。
---
個々のセルに代入するより、
DataGridView.DataSource = List<T>
の一発でデータバインドしたほうがよい。
さらに、
ExecuteReader / List<T> より DataAdapter / DataSet がよい。
DataSet より 型付DataSet がよい。
BindingSource を噛ませるとさらによい。

DataAdapter/型付DataSet/BindingSourceをドラッグ&ドロップで自動生成する方法を試してみるべし。

ドラッグ&ドロップ一発でDB連携アプリを完全構築!
http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_12/vb2005_12_01.html
---
http://bbs.wankuma.com/index.cgi?mode=al2&namber=89240
No6も参照


List<T> と BindingSourceの組み合わせは初めて知りました。
引用返信 編集キー/
■89398 / inTopicNo.14)  Re[10]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ VB.net Biginner (5回)-(2018/11/24(Sat) 00:32:15)
飲食店のオーダーシステムを作成しています。
メインのFormのDataGridViewにはSQLで作成したテーブルのデータが表示されています。SQLを使用するのは初めてです。
商品IDをテキストボックスに入力すると対応する行の商品名(ラベルテキスト1)、価格(ラベルテキスト2)が表示され、ボタンを押すと各部屋ごとのFormのDataGridViewに注文履歴が表示されるようなプログラムが作りたいです。

今回の場合だとDataGridViewは表示に使うだけでDataGridViewのデータソースへデータを追加する方がいろいろ便利でいいということですか?
引用返信 編集キー/
■89399 / inTopicNo.15)  Re[11]: Form1のテキストボックスの内容をForm2のDGVに
□投稿者/ WebSurfer (1677回)-(2018/11/24(Sat) 05:53:30)
No89398 (VB.net Biginner さん) に返信

> 今回の場合だとDataGridViewは表示に使うだけでDataGridViewのデータソースへデータを追加する方がいろいろ便利でいいということですか?

ちょっと違うかと。

データソースを型付 DaraSet/DataTable にして、
それに TableAdapter を利用してユーザーが指定し
た条件に応じてSQL Server よりデータを抽出して保
存し、それを DataGtidView に表示するのです。

引用返信 編集キー/
■89400 / inTopicNo.16)  Re: Form1のテキストボックスの内容をForm2のDG
□投稿者/ リンクス (2回)-(2018/11/25(Sun) 10:09:58)
2018/11/25(Sun) 10:36:31 編集(投稿者)

DataGridViewに表示した後どうするかにもよるけれど、
別にDataGridViewは必ずしもDataSourceのバインドが必要というわけではないよ。
RDBMSを利用するわけではなく、単にリスト表示にDataGridViewを使うだけであれば、
DataGridView1.Rows.Add(行1データ, 行2データ, 行3データ...)が楽でいいんじゃね?
もちろん、空行のデータソースを用意して、それにデータを追加してもいいけど、このデータ量だったら、オレはそこまでしない。する必要性を感じない。
引用返信 編集キー/
■89405 / inTopicNo.17)  Re[13]: Re: Form1のテキストボックスの内容をForm2のDG
□投稿者/ VB.net Biginner (7回)-(2018/11/27(Tue) 02:04:50)
> DataGridView1.Rows.Add(行1データ, 行2データ, 行3データ...)が楽でいいんじゃね?
これはなぜか追加後Form2(部屋ごとのForm)を閉じるとDataGridViewの中身が消えてしまいました。

今は部屋ごとにデータベース(.mdf)、データセット(.xsd)を作成して、注文Formのボタンから部屋ごとのデータテーブルにデータを追加して、それをDataGridViewにバインディングして表示しようと試みています。
検索しても新しく?データテーブルを作成してそのテーブルに行を追加していくコードしかなく、それを参考にコードを考えてみましたがうまくいきません。
どのように書けばいいでしょうか?
注文FormのText1,2,3をボタンクリックでDataTableに追加、そのデータを部屋ごとのDataGridViewにバインディングして表示したいです。

引用返信 編集キー/
■89407 / inTopicNo.18)  Re[14]: Re: Form1のテキストボックスの内容をForm2のDG
□投稿者/ WebSurfer (1679回)-(2018/11/27(Tue) 10:23:20)
No89405 (VB.net Biginner さん) に返信

文章には適宜改行を入れてもらえませんか。読み難いです。

> 検索しても新しく?データテーブルを作成してそのテーブルに行を追加していくコードしかなく、
> それを参考にコードを考えてみましたがうまくいきません。
> どのように書けばいいでしょうか?

少なくとも自分には情報不足で分かりません。

質問者さんが、(1) どのようなことを期待して、(2) どのような実装をしたが、(3) 結果は期待に
反してどのようになってしまうかということを、具体的に(ここに書いてないこと以外は知り得な
い第三者が分かるようにあくまで具体的に)書いてください。

> 注文FormのText1,2,3をボタンクリックでDataTableに追加、そのデータを部屋ごとのDataGridView
> にバインディングして表示したいです。

全体的なやりたいことは No89398 の通りと理解していますが、上記は一体その中の何なのですか?


引用返信 編集キー/
■89410 / inTopicNo.19)  Re[15]: Re: Form1のテキストボックスの内容をForm2のDG
□投稿者/ VB.net Biginner (9回)-(2018/11/27(Tue) 11:23:18)
(1) どのようなことを期待して、
全体的なやりたいことはNo89398です。

現在躓いているところは
注文FormのText1,2,3をボタンクリックで各部屋ごとのDataTableに追加する部分です。


(2) どのような実装をしたが、

Dim dt As DataTable = Room101DatabaseDataSet.Tables("Table")'各部屋ごとのデータテーブル
Dim dr As DataRow

dr = dt.NewRow()
dr("id") = TextBox1.Text
dr("商品名") = Label1.Text
dr("値段") = Label2.Text
'行を追加
dt.Rows.Add(dr)

(3) 結果は期待に反してどのようになってしまうか
上記のコードを試したところ、Room101DatabaseDataSet.Tables("Table")のところで下記のエラーが出てしまいます。

エラー BC32016 'Public ReadOnly Property Tables As DataTableCollection' にはパラメーターがないため、戻り値の型をインデックス化できません。

引用返信 編集キー/
■89412 / inTopicNo.20)  Re[16]: Re: Form1のテキストボックスの内容をForm2のDG
 
□投稿者/ WebSurfer (1680回)-(2018/11/27(Tue) 11:59:51)
No89410 (VB.net Biginner さん) に返信

どうも話が通じないようです。ちょっとギブアップ気味ですが、もう一度だけ。

> 全体的なやりたいことはNo89398です。

そのシナリオ・ストーリーの中で、

> 注文FormのText1,2,3をボタンクリックで各部屋ごとのDataTableに追加する部分です。

というような操作は自分の頭の中では存在し得ないです。なので、そういうことをする意味が全く
理解できません。見当違い・的外れなことをしている気がします。

TextBox ということはユーザー入力ですよね? であれば、上で紹介されているデーターソース
構成ウィザードを使って普通に作れば、ユーザー入力は直接 DataGridView に入力すればよく、
DB へ反映したければボタンクリックだけでできます。

もし、見当違い・的外れなことだとすると、考える気力がわいてきません。

そんなことはどうでもいいから質問に答えろと言う話であれば、他の方の配当をお待ちください。




引用返信 編集キー/

このトピックをツリーで一括表示

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -