SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

フリーレイアウトグリッドで業務アプリケーションを作成する(AD)

フリーレイアウトグリッドを使った
業務アプリケーションの作成 2 - 受注画面の作成

第2回 受注画面(入力画面)の作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

 前回は、実行時にユーザーの手で単一行表示から、複数行表示にレイアウトを変更する形で、エンドユーザーを巻き込んだ検索画面のモックアップを作成する手順を紹介しましたが、今回はそれに続き受注画面のモックアップを作成します。受注画面は、新規データの入力と既存データの表示が行えるものとし、今回もまた、実行時にユーザーの手でレイアウトを変更していただきます。

  • X ポスト
  • このエントリーをはてなブックマークに追加
今回作成する「受注画面」のモックアップ
今回作成する「受注画面」のモックアップ

はじめに

 フリーレイアウトグリッドは、デザイン時だけでなく実行時でも行列の調整や項目の入れ替えなど、レイアウトを自由に変更することができます。つまり、ユーザー自身の手で好きなレイアウトに設定してもらうことができます。

 しかも、フリーレイアウトグリッドには一度変更したレイアウトをそのまま保存する機能が付いているため、わざわざプログラマーがその処理を記述する必要はありません。

 前回は検索画面を作成する手順を紹介しましたが、今回はそれに続き受注画面のモックアップを作成します。受注画面は、新規データの入力と既存データの表示が行えるものとします。

対象読者

  • 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テキストボックスにゼロを入力することで、新しい受注データを入力できるようにします。

 画面構成としては、上半分に標準コントロールを使って受注データのヘッダ情報を表示し、下半分にフリーレイアウトグリッドを配置して、受注データの明細情報を表示するようにします。

 さらに、前回作成した得意先検索画面を呼び出して、検索結果から得意先を選択することにより、得意先の指定を簡単に行えるようにします。

ビューおよびストアドプロシージャの作成

 上田君は前回と同様に、ビュー、ストアドプロシージャ、画面の順に作成することにしました。

 ビューは、受注ヘッダー情報を格納する「受注トラン」と、受注明細情報を格納する「受注明細トラン」を作成します。前回、山下課長が使用していたダミービュー生成マクロを使用することで、簡単に作成することができました。

受注明細トランのExcel マクロ
受注明細トランのExcel マクロ
受注トランのビュー
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
動画での詳しい解説

 受注画面の詳しい作成方法は、以下のリンクにあるビデオ動画にまとめていますので、こちらご覧になってください。

 

「受注画面」のコード

Visual Basic
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
C#
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();
        }
    }
}

「商品検索画面」のコード

Visual Basic
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
C#
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();
        }
    }
}

まとめ

 今回は受注画面の作成を行いました。フリーレイアウトグリッドを使用すれば、これまでの応用により、どんな画面でも簡単に作成できることがお分かりいただけたかと思います。次回は、検索画面で仕様変更が発生したときの対処方法について説明します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3056 2008/09/25 10:45

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング