- PR -

DataViewからTextBoxにデータを表示したい

1
投稿者投稿内容
OZ
会議室デビュー日: 2004/11/02
投稿数: 9
投稿日時: 2004-11-02 10:15
はじめまして。OZと申します。

フィルターをかけたDataViewの中にあるデータをDataGridではなくTextBoxに表示したいのですが、方法が見つかりません。

方法があるのかないのかもわからない状態です。どなたかご教授願えませんでしょうか?
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-11-02 11:19
南部です。

よくわかりませんが、こんな感じでしょうか、、、

コード:

	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.TextBox textBox1;
		private System.Windows.Forms.Button button1;
		private System.Windows.Forms.Button button2;
		/// <summary>
		/// 必要なデザイナ変数です。
		/// </summary>
		private System.ComponentModel.Container components = null;


		private DataTable table;

		public Form1()
		{
			//
			// Windows フォーム デザイナ サポートに必要です。
			//
			InitializeComponent();

			//
			// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
			//

			table = new DataTable("Test");
			table.Columns.Add("col1");
			table.Columns.Add("col2");

			table.Rows.Add(new object[] { 1, "aaaa"});
			table.Rows.Add(new object[] { 2, "bbbb"});
			table.Rows.Add(new object[] { 3, "cccc"});


			textBox1.DataBindings.Add("Text", table, "col2");

		}

		/// <summary>
		/// 使用されているリソースに後処理を実行します。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows フォーム デザイナで生成されたコード 
		/// <summary>
		/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
		/// コード エディタで変更しないでください。
		/// </summary>
		private void InitializeComponent()
		{
			this.textBox1 = new System.Windows.Forms.TextBox();
			this.button1 = new System.Windows.Forms.Button();
			this.button2 = new System.Windows.Forms.Button();
			this.SuspendLayout();
			// 
			// textBox1
			// 
			this.textBox1.Location = new System.Drawing.Point(8, 40);
			this.textBox1.Name = "textBox1";
			this.textBox1.Size = new System.Drawing.Size(184, 19);
			this.textBox1.TabIndex = 0;
			this.textBox1.Text = "";
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(200, 40);
			this.button1.Name = "button1";
			this.button1.TabIndex = 1;
			this.button1.Text = "&Back";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// button2
			// 
			this.button2.Location = new System.Drawing.Point(280, 40);
			this.button2.Name = "button2";
			this.button2.TabIndex = 2;
			this.button2.Text = "&Next";
			this.button2.Click += new System.EventHandler(this.button2_Click);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
			this.ClientSize = new System.Drawing.Size(376, 77);
			this.Controls.Add(this.button2);
			this.Controls.Add(this.button1);
			this.Controls.Add(this.textBox1);
			this.Name = "Form1";
			this.Text = "Form1";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// アプリケーションのメイン エントリ ポイントです。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			BindingManagerBase bmb = textBox1.BindingContext[table];
			if(bmb.Position > 0)
				bmb.Position--;
			
		}

		private void button2_Click(object sender, System.EventArgs e)
		{
			BindingManagerBase bmb = textBox1.BindingContext[table];
			if(bmb.Position < table.Rows.Count-1)
				bmb.Position++;
		}
	}



OZ
会議室デビュー日: 2004/11/02
投稿数: 9
投稿日時: 2004-11-02 12:07
南部 様
ご返答ありがとうございました。

言葉足らずで申し訳ありません。
ADO.NETとVB.NETを用いてデータベース構築をしています。
DataSetと連動させたDataviewにフィルタを行い、その結果を
DataGridではなくTextBoxに表示したいと思います。
です。

南部さんのソースを参考に
TextBoxRevisionInputPWBSLB.DataBindings.Add("Text", DataView1, "col2")
とコーディングしましたが
「'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : ターゲット コントロールでプロパティ 'Text' に連結できません。」
と出ました。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-11-02 13:22
南部です。

TextBoxRevisionInputPWBSLBにTextプロパティがなさそうな感じですが、、、
あります?
OZ
会議室デビュー日: 2004/11/02
投稿数: 9
投稿日時: 2004-11-02 13:42
OZです
すみませんTextBoxRevisionInputPWBSLBはTextBoxです
そのまま貼り付けてわかり易いように書き換えし忘れました
TextBox1.DataBindings.Add("Text", DataView1, "col2")
と、南部さんのソースとほとんど同じとお考えください。

変えたところは第二引数のDataTableからDataViewにしたところです
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-11-02 14:47
Hasumiです。

DataView.RowFilter プロパティの使用例が参考になるかと。

ところで、OZさんの作成した、DataView1には"col2"という名称のColumnが存在しないのでは?

[追記]
Binding クラスも調べてみては。

[ メッセージ編集済み 編集者: Hasumi 編集日時 2004-11-02 14:53 ]
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-11-02 15:29
引用:

OZさんの書き込み (2004-11-02 12:07) より:
「'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : ターゲット コントロールでプロパティ 'Text' に連結できません。」


南部です。

これって、
TextBoxRevisionInputPWBSLBにTextプロパティがあれば、出ないと思いますが、、、
んー、不思議。

ちなみに、DataTableをDataViewに変えても問題ないはずです。
どこが、おかしいんでしょう?

例外は、上記のままでしょうか?
OZ
会議室デビュー日: 2004/11/02
投稿数: 9
投稿日時: 2004-11-02 17:18
原因判明しました
お恥ずかしながら、第一引数の"Text"のスペルミスだと思います。

Husumiさんの紹介していただいた使用例をコピー&ペーストしたら
できました。

南部さん、Husumiさん。アドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)