はじめに
フリーレイアウトグリッドは、デザイン時だけでなく実行時でも行列の調整や項目の入れ替えなど、レイアウトを自由に変更することができます。つまり、ユーザー自身の手で好きなレイアウトに設定してもらうことができます。
しかも、フリーレイアウトグリッドには一度変更したレイアウトをそのまま保存する機能が付いているため、わざわざプログラマーがその処理を記述する必要はありません。
前回は検索画面を作成する手順を紹介しましたが、今回はそれに続き受注画面のモックアップを作成します。受注画面は、新規データの入力と既存データの表示が行えるものとします。
対象読者
- Visual Basic 2005/2008またはVisual C# 2005/2008を使ってプログラムを作ったことのある人。
- 社内での立場がプログラマに指示を出す人、顧客にシステム提案をする人、基本的なSQLが理解できる人。
必要な環境
Visual Basic 2005/2008またはVisual C# 2005/2008を使ってプログラムが作れる環境があること。また、SQL Serverがインストールされている必要があります。
なお、Visual Basic 2005 Express Edition、Visual C# 2005 Express Edition、SQL Server 2005 Express Editionでも使用可能です。
サンプルプログラム実行時の注意事項
サンプルプログラムを実行する際は、ソースコード圧縮ファイルに同梱してある「サンプルのご利用方法.txt」をお読みください。
コントロールのインストール
はじめてフリーレイアウトグリッドを使用する方は、プロジェクトにフリーレイアウトグリッドをインストールする必要があります。
第1回の解説を参考に、事前にフリーレイアウトグリッドのインストールと、ツールボックスへのコントロールの追加を行っておいてください。
「受注画面」のラフ図 作成
前回と同様に、システム開発課の山下課長は新人の上田君に次のような「受注画面」の作成を指示しました。
この受注画面は、受注Noテキストボックスに既存の受注番号を入力すると、データベースから受注Noに該当する受注データを取得し、フォームに表示します。
また、受注Noテキストボックスにゼロを入力することで、新しい受注データを入力できるようにします。
画面構成としては、上半分に標準コントロールを使って受注データのヘッダ情報を表示し、下半分にフリーレイアウトグリッドを配置して、受注データの明細情報を表示するようにします。
さらに、前回作成した得意先検索画面を呼び出して、検索結果から得意先を選択することにより、得意先の指定を簡単に行えるようにします。
ビューおよびストアドプロシージャの作成
上田君は前回と同様に、ビュー、ストアドプロシージャ、画面の順に作成することにしました。
ビューは、受注ヘッダー情報を格納する「受注トラン」と、受注明細情報を格納する「受注明細トラン」を作成します。前回、山下課長が使用していたダミービュー生成マクロを使用することで、簡単に作成することができました。
USE [czsample] GO /****** オブジェクト: View [dbo].[vi受注トラン] スクリプト日付: 09/03/2008 15:54:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[vi受注トラン] AS SELECT 10005318 AS 受注コード, CAST('2008/8/21' AS datetime) AS 受注日, CAST('2008/9/1' AS datetime) AS 納期, 100024 AS 納品先, 100002 AS 請求先, CAST('2008/9/1' AS datetime) AS 請求日, 100002 AS 出荷先
USE [czsample] GO /****** オブジェクト: View [dbo].[vi受注明細トラン] スクリプト日付: 09/03/2008 15:55:20 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[vi受注明細トラン] AS SELECT 10000001 AS 商品コード, 'ダイニングテーブル4人用1500×700×900ホワイト' AS 商品名, 5 AS 数量, 100000 AS 定価, 80000 AS 単価, 400000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000002 AS 商品コード, 'ダイニングテーブル6人用1700×850×900ホワイト' AS 商品名, 3 AS 数量, 100000 AS 定価, 70000 AS 単価, 210000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000003 AS 商品コード, 'チェアー' AS 商品名, 20 AS 数量, 30000 AS 定価, 21000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000004 AS 商品コード, 'ベッド<シングル>1900×800×500' AS 商品名, 4 AS 数量, 100000 AS 定価, 70000 AS 単価, 280000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000005 AS 商品コード, 'ベッド<セミダブル>2100×1200×400' AS 商品名, 4 AS 数量, 150000 AS 定価, 120000 AS 単価, 480000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000006 AS 商品コード, 'ベッド<ダブル>2100×1600×400' AS 商品名, 2 AS 数量, 200000 AS 定価, 160000 AS 単価, 320000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000007 AS 商品コード, 'タンス' AS 商品名, 10 AS 数量, 60000 AS 定価, 42000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000008 AS 商品コード, 'ソファー2人用ベージュ' AS 商品名, 15 AS 数量, 40000 AS 定価, 28000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000009 AS 商品コード, 'ソファー3人用ベージュ' AS 商品名, 10 AS 数量, 60000 AS 定価, 42000 AS 単価, 420000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000010 AS 商品コード, 'ダイニングテーブル4人用1500×700×900ブラック' AS 商品名, 5 AS 数量, 100000 AS 定価, 80000 AS 単価, 400000 AS 小計, '限定商品' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000011 AS 商品コード, 'ダイニングテーブル6人用1700×850×900ブラック' AS 商品名, 3 AS 数量, 100000 AS 定価, 70000 AS 単価, 210000 AS 小計, '限定商品' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000012 AS 商品コード, 'カーテン<76>2000×1500' AS 商品名, 2 AS 数量, 30000 AS 定価, 24000 AS 単価, 48000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000013 AS 商品コード, 'カーテン<34>2000×1500' AS 商品名, 2 AS 数量, 20000 AS 定価, 14000 AS 単価, 28000 AS 小計, '' AS 備考, 10005318 AS 受注コード UNION ALL SELECT 10000014 AS 商品コード, 'カーテン<19>2000×1500' AS 商品名, 4 AS 数量, 15000 AS 定価, 12000 AS 単価, 48000 AS 小計, '' AS 備考, 10005318 AS 受注コード
作成するストアドプロシージャは、先程作成したビューを抽出するためのものと、受注明細トランにインサートするためのストアドプロシージャです。
インサートするストアドプロシージャは、今回はビューを使用しているため実際に追加は行わず、入力チェックだけを行い、チェックが通ったか否かを返すものにします。
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prHeader] スクリプト日付: 09/03/2008 15:58:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 受注ヘッダ情報を検索します。 -- 引数:@受注コード -- CREATE PROCEDURE [dbo].[prHeader] ( @受注コード int ) AS SET NOCOUNT ON -- 名称に一致する受注ヘッダ情報を抽出し、結果のレコードを返します。 SELECT j.受注コード, j.受注日, j.納期, j.納品先, j.請求先, j.請求日, j.出荷先 FROM dbo.vi受注トラン AS j WHERE 受注コード = @受注コード RETURN
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prDetail] スクリプト日付: 09/03/2008 15:58:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 受注明細情報を検索します。 -- 引数:@受注コード -- CREATE PROCEDURE [dbo].[prDetail] ( @受注コード int ) AS SET NOCOUNT ON -- 名称に一致する受注明細情報を抽出し、結果のレコードを返します。 SELECT 商品コード, 商品名, 数量, 定価, 単価, 小計, 備考, 受注コード FROM dbo.vi受注明細トラン WHERE 受注コード = @受注コード RETURN
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[prInsDetail] スクリプト日付: 09/03/2008 15:59:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 明細を追加します。※実際は必須入力チェックしか行わない。 -- 引数:@商品コード、@商品名、@数量、@定価、@単価、@小計、@備考、@受注コード -- CREATE PROCEDURE [dbo].[prInsDetail] ( @商品コード int ,@商品名 varchar(100) ,@数量 int ,@定価 int ,@単価 int ,@小計 int ,@備考 varchar(100) ,@受注コード int ) AS SET NOCOUNT ON SELECT 1 -- 入力した値が不正な場合は0以外を返します RETURN (CASE WHEN @商品コード >= 10000000 THEN 0 ELSE 1 END) + (CASE @商品名 WHEN '' THEN 1 ELSE 0 END)
また、得意先コードを入力したときに、得意先名を自動的に表示させるためのストアドプロシージャも作成しておきます。
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[pr得意先取得] スクリプト日付: 09/03/2008 16:00:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 得意先を取得します。 -- 引数:@得意先ID -- CREATE PROCEDURE [dbo].[pr得意先取得] ( @得意先ID int ) AS SET NOCOUNT ON -- 名称に一致する得意先を抽出し、結果のレコードを返します。 SELECT 得意先名 FROM dbo.vi得意先マスタ WHERE 得意先ID = @得意先ID RETURN
商品検索画面の作成
ここまで作成した内容を田中課長にレビューしたところ、以下の要望が出されました。
- 商品名が途中で隠れているため列幅を広くして、多段明細にして欲しい。
- 商品名の入力も検索画面から指定できるようにして欲しい。
多段明細はフリーレイアウトグリッドのレイアウト機能を使ってすぐ修正。商品名の入力は、得意先画面と同様に商品検索画面を作成し、フリーレイアウトグリッドから呼び出せるように修正しました。
USE [czsample] GO /****** オブジェクト: StoredProcedure [dbo].[pr商品検索] スクリプト日付: 09/03/2008 15:59:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- 商品を検索します。 -- 引数:@商品名 -- CREATE PROCEDURE [dbo].[pr商品検索] ( @商品名 varchar(100) ,@検索オプション int ) AS SET NOCOUNT ON -- 名称に一致する商品を抽出し、結果のレコードを返します。 SELECT 商品コード, 商品名, 数量, 定価, 単価, 小計, 備考, 受注コード FROM dbo.vi受注明細トラン WHERE 商品名 LIKE dbo.fnFinedName(@商品名, @検索オプション) RETURN
受注画面の詳しい作成方法は、以下のリンクにあるビデオ動画にまとめていますので、こちらご覧になってください。
- フリーレイアウトグリッドで受注画面を作成する Part1
(高解像度版のダウンロード/wmv形式) - フリーレイアウトグリッドで受注画面を作成する Part2
(高解像度版のダウンロード/wmv形式) - フリーレイアウトグリッドで受注画面を作成する Part3
(高解像度版のダウンロード/wmv形式)
「受注画面」のコード
Public Class Form1 'デザインで作成した明細にアクセスするためのコレクションアダプタです Private DetailCollection As G1FreeGrid1DetailAdapterCollection1 Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click DetailCollection = New G1FreeGrid1DetailAdapterCollection1(G1FreeGrid1) Dim control As Control control = sender Dim CurrentRowNo As Integer CurrentRowNo = G1FreeGrid1.GetPositionFromControl(control) CzsampleDataSet.prDetail.商品コードColumn.AllowDBNull = True CzsampleDataSet.prDetail.商品名Column.AllowDBNull = True CzsampleDataSet.prDetail.数量Column.AllowDBNull = True CzsampleDataSet.prDetail.定価Column.AllowDBNull = True CzsampleDataSet.prDetail.単価Column.AllowDBNull = True CzsampleDataSet.prDetail.小計Column.AllowDBNull = True CzsampleDataSet.prDetail.備考Column.AllowDBNull = True CzsampleDataSet.prDetail.受注コードColumn.AllowDBNull = True Dim f3 As Form3 f3 = New Form3() f3.mode_obj_id = DetailCollection(CurrentRowNo).TextBox1 f3.mode_obj_name = DetailCollection(CurrentRowNo).TextBox2 f3.ShowDialog() DetailCollection(CurrentRowNo).TextBox1.Refresh() DetailCollection(CurrentRowNo).TextBox2.Refresh() End Sub Private Sub txtJuchuNo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtJuchuNo.TextChanged Dim juchuNo As Integer juchuNo = 0 If Not txtJuchuNo.Text = "" Then juchuNo = Integer.Parse(txtJuchuNo.Text) End If PrHeaderTableAdapter.Fill(CzsampleDataSet.prHeader, juchuNo) PrDetailTableAdapter.Fill(CzsampleDataSet.prDetail, juchuNo) '小計の合計を表示する Dim shokei As Integer shokei = 0 Dim i As Integer If 0 < CzsampleDataSet.prDetail.Rows.Count Then For i = 0 To CzsampleDataSet.prDetail.Rows.Count - 1 shokei += CzsampleDataSet.prDetail.Rows(i)("小計") Next End If labSumShokei.Text = shokei.ToString() '新規の場合は空白行を追加する If juchuNo = 0 Then CzsampleDataSet.prDetail.商品コードColumn.AllowDBNull = True CzsampleDataSet.prDetail.商品名Column.AllowDBNull = True CzsampleDataSet.prDetail.数量Column.AllowDBNull = True CzsampleDataSet.prDetail.定価Column.AllowDBNull = True CzsampleDataSet.prDetail.単価Column.AllowDBNull = True CzsampleDataSet.prDetail.小計Column.AllowDBNull = True CzsampleDataSet.prDetail.備考Column.AllowDBNull = True CzsampleDataSet.prDetail.受注コードColumn.AllowDBNull = True CzsampleDataSet.prDetail.AddprDetailRow(CzsampleDataSet.prDetail.NewprDetailRow()) End If End Sub Private Sub button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button5.Click 'Insertストアドを実行する Dim detailIndex As Integer detailIndex = CzsampleDataSet.prDetail.Count - 1 Dim newdetail As czsampleDataSet.prDetailRow newdetail = CzsampleDataSet.prDetail(detailIndex) Dim dat1 As Integer Dim dat2 As String Dim dat3 As Integer Dim dat4 As Integer Dim dat5 As Integer Dim dat6 As Integer Dim dat7 As String Dim dat8 As Integer dat1 = newdetail.商品コード dat2 = newdetail.商品名 dat3 = newdetail.数量 dat4 = newdetail.定価 dat5 = newdetail.単価 dat6 = newdetail.小計 dat7 = newdetail.備考 dat8 = Integer.Parse(txtJuchuNo.Text) PrDetailTableAdapter.Insert(dat1, dat2, dat3, dat4, dat5, dat6, dat7, dat8) 'Return Valueを取得する Dim rev As Integer rev = PrDetailTableAdapter.Adapter.InsertCommand.Parameters(0).Value If rev = 0 Then MessageBox.Show("登録されました") Else MessageBox.Show("正しく入力されていない箇所があります。") End If End Sub Private Sub txtNohin_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNohin.TextChanged Dim tokuisakiNo As Integer If Not txtNohin.Text = "" Then tokuisakiNo = Integer.Parse(txtNohin.Text) End If Pr得意先取得TableAdapter.Fill(CzsampleDataSet.pr得意先取得, tokuisakiNo) End Sub Private Sub txtSeikyu_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSeikyu.TextChanged Dim tokuisakiNo As Integer If Not txtSeikyu.Text = "" Then tokuisakiNo = Integer.Parse(txtSeikyu.Text) End If Pr得意先取得2TableAdapter.Fill(CzsampleDataSet.pr得意先取得2, tokuisakiNo) End Sub Private Sub txtShukka_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtShukka.TextChanged Dim tokuisakiNo As Integer If Not txtShukka.Text = "" Then tokuisakiNo = Integer.Parse(txtShukka.Text) End If Pr得意先取得3TableAdapter.Fill(CzsampleDataSet.pr得意先取得3, tokuisakiNo) End Sub Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click Dim f2 As Form2 f2 = New Form2() f2.mode_obj = txtNohin f2.Show() End Sub Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click Dim f2 As Form2 f2 = New Form2() f2.mode_obj = txtSeikyu f2.Show() End Sub Private Sub button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button3.Click Dim f2 As Form2 f2 = New Form2() f2.mode_obj = txtShukka f2.Show() End Sub End Class
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace gridcz2_create { public partial class Form1 : Form { // デザインで作成した明細にアクセスするためのコレクションアダプタです private G1FreeGrid1DetailAdapterCollection1 DetailCollection; public Form1() { InitializeComponent(); } private void txtJuchuNo_TextChanged(object sender, EventArgs e) { int juchuNo = 0; if (txtJuchuNo.Text != "") { juchuNo = int.Parse(txtJuchuNo.Text); } prHeaderTableAdapter.Fill(czsampleDataSet.prHeader, juchuNo); prDetailTableAdapter.Fill(czsampleDataSet.prDetail, juchuNo); // 小計の合計を表示する int shokei = 0; for (int i = 0; i < czsampleDataSet.prDetail.Rows.Count; i++) { shokei += (int)czsampleDataSet.prDetail.Rows[i]["小計"]; } labSumShokei.Text = shokei.ToString(); // 新規の場合は空白行を追加する if (juchuNo == 0) { czsampleDataSet.prDetail.商品コードColumn.AllowDBNull = true; czsampleDataSet.prDetail.商品名Column.AllowDBNull = true; czsampleDataSet.prDetail.数量Column.AllowDBNull = true; czsampleDataSet.prDetail.定価Column.AllowDBNull = true; czsampleDataSet.prDetail.単価Column.AllowDBNull = true; czsampleDataSet.prDetail.小計Column.AllowDBNull = true; czsampleDataSet.prDetail.備考Column.AllowDBNull = true; czsampleDataSet.prDetail.受注コードColumn.AllowDBNull = true; czsampleDataSet.prDetail.AddprDetailRow(czsampleDataSet.prDetail.NewprDetailRow()); } } private void button5_Click(object sender, EventArgs e) { // Insertストアドを実行する int detailIndex = czsampleDataSet.prDetail.Count - 1; czsampleDataSet.prDetailRow newdetail = czsampleDataSet.prDetail[detailIndex]; int dat1 = newdetail.商品コード; string dat2 = newdetail.商品名; int dat3 = newdetail.数量; int dat4 = newdetail.定価; int dat5 = newdetail.単価; int dat6 = newdetail.小計; string dat7 = newdetail.備考; int dat8 = int.Parse(txtJuchuNo.Text); prDetailTableAdapter.Insert(dat1, dat2, dat3, dat4, dat5, dat6, dat7, dat8); // Return Valueを取得する //int rev = (int)prDetailTableAdapter.Adapter.InsertCommand.Parameters[0].Value; //★保護エラーが発生する場合は以下の処理を使用してください。 int rev = (int)prDetailTableAdapter.ReturnValue; if (rev == 0) { MessageBox.Show("登録されました。"); } else { MessageBox.Show("正しく入力されていない箇所があります。"); } } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.mode_obj = txtNohin; f2.Show(); } private void button2_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.mode_obj = txtSeikyu; f2.Show(); } private void button3_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.mode_obj = txtShukka; f2.Show(); } private void txtNohin_TextChanged(object sender, EventArgs e) { int tokuisakiNo = 0; if (txtNohin.Text != "") { tokuisakiNo = int.Parse(txtNohin.Text); } pr得意先取得TableAdapter.Fill(czsampleDataSet.pr得意先取得, tokuisakiNo); } private void txtSeikyu_TextChanged(object sender, EventArgs e) { int tokuisakiNo = 0; if (txtSeikyu.Text != "") { tokuisakiNo = int.Parse(txtSeikyu.Text); } pr得意先取得2TableAdapter.Fill(czsampleDataSet.pr得意先取得2, tokuisakiNo); } private void txtShukka_TextChanged(object sender, EventArgs e) { int tokuisakiNo = 0; if (txtShukka.Text != "") { tokuisakiNo = int.Parse(txtShukka.Text); } pr得意先取得3TableAdapter.Fill(czsampleDataSet.pr得意先取得3, tokuisakiNo); } private void button7_Click(object sender, EventArgs e) { DetailCollection = new G1FreeGrid1DetailAdapterCollection1(g1FreeGrid1); Control control = sender as Control; int CurrentRowNo = g1FreeGrid1.GetPositionFromControl(control); czsampleDataSet.prDetail.商品コードColumn.AllowDBNull = true; czsampleDataSet.prDetail.商品名Column.AllowDBNull = true; czsampleDataSet.prDetail.数量Column.AllowDBNull = true; czsampleDataSet.prDetail.定価Column.AllowDBNull = true; czsampleDataSet.prDetail.単価Column.AllowDBNull = true; czsampleDataSet.prDetail.小計Column.AllowDBNull = true; czsampleDataSet.prDetail.備考Column.AllowDBNull = true; czsampleDataSet.prDetail.受注コードColumn.AllowDBNull = true; Form3 f3 = new Form3(); f3.mode_obj_id = DetailCollection[CurrentRowNo].TextBox1; f3.mode_obj_name = DetailCollection[CurrentRowNo].TextBox2; f3.ShowDialog(); DetailCollection[CurrentRowNo].TextBox1.Refresh(); DetailCollection[CurrentRowNo].TextBox2.Refresh(); } } }
「商品検索画面」のコード
Public Class Form3 Public mode_obj_id As TextBox Public mode_obj_name As TextBox Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click Me.Close() End Sub Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click Dim pos As Integer pos = G1FreeGrid1.GetSelectedDetailPositions(0) mode_obj_id.Text = CzsampleDataSet2.pr商品検索(pos).商品コード.ToString() mode_obj_name.Text = CzsampleDataSet2.pr商品検索(pos).商品名.ToString() Me.Close() End Sub Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click Dim opt As Integer If チェックボックス.Checked Then opt = 1 End If Pr商品検索TableAdapter.Fill(CzsampleDataSet2.pr商品検索, テキストボックス.Text, opt) End Sub End Class
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace gridcz2_create { public partial class Form3 : Form { public Form3() { InitializeComponent(); } public TextBox mode_obj_id = null; public TextBox mode_obj_name = null; private void button2_Click(object sender, EventArgs e) { this.Close(); } private void btnSearch_Click(object sender, EventArgs e) { int opt = 0; if (チェックボックス.Checked) { opt = 1; } pr商品検索TableAdapter.Fill(czsampleDataSet2.pr商品検索, テキストボックス.Text, opt); } private void button1_Click(object sender, EventArgs e) { int pos = g1FreeGrid1.GetSelectedDetailPositions()[0]; mode_obj_id.Text = czsampleDataSet2.pr商品検索[pos].商品コード.ToString(); mode_obj_name.Text = czsampleDataSet2.pr商品検索[pos].商品名.ToString(); this.Close(); } } }
まとめ
今回は受注画面の作成を行いました。フリーレイアウトグリッドを使用すれば、これまでの応用により、どんな画面でも簡単に作成できることがお分かりいただけたかと思います。次回は、検索画面で仕様変更が発生したときの対処方法について説明します。