一括削除

  画面





リストビューにチェックボックスを実装します。
( 実装できる位置は先頭に限られています )

先頭に項目が増えたので、問い合わせメソッドの引数を変更する必要があります

CurDb->LoadSqlData( Lv, 1 , Query );



  App_51.h



  
#define MyEXTERN extern
#include "MTN.h"

class App_51  
{
public:

	LboxListview *Lv;

	BOOL DataRequest( void );
	void SelectCheck( void );
	void SelectCheckOff( void );
	BOOL DeleteData( void );

	App_51( HWND hDlg, LboxListview *Lview );
	App_51();
	virtual ~App_51();

};
  



  App_51.cpp

  
// *********************************************************
// コンストラクタ
// *********************************************************
App_51::App_51( HWND hDlg, LboxListview *Lview )
{

	Lv = Lview;

	// ダイアログオブジェクト作成
	Dlg = new LboxDlg( hDlg );
	Dlg->ChangeStyle( WS_MINIMIZEBOX | WS_SYSMENU, 0 );
	Dlg->ChangeExStyle( WS_EX_APPWINDOW, 0 );
	Dlg->StatusCreate( 0 );

	// プログラムID
	Dlg->EditSetText( IDC_PROGID, "HM210" );

	// 項目属性設定

}

App_51::App_51()
{

}

App_51::~App_51()
{

}

// *********************************************************
// 選択行をチェック
// *********************************************************
void App_51::SelectCheck( void )
{
	int nRow;

	nRow = -1;
	while( Lv->FindNextSelectedRow( &nRow ) ) {
		Lv->SetCheck( nRow, true );
	}

}

// *********************************************************
// 選択行のチェックを外す
// *********************************************************
void App_51::SelectCheckOff( void )
{
	int nRow;

	nRow = -1;
	while( Lv->FindNextSelectedRow( &nRow ) ) {
		Lv->SetCheck( nRow, false );
	}

}

// *********************************************************
// 削除
// *********************************************************
BOOL App_51::DeleteData( void )
{
	if ( !CurDb->Connect() ) {
		Dlg->MsgOk("データベースの接続に失敗しました    ");
		return false;
	}	

	int nRow;
	BOOL bExist;

	bExist = false;
	nRow = -1;
	Buff->operator = ("delete from 商品分類マスタ where 商品分類 = ");
	while( Lv->FindNextSelectedRow( &nRow ) ) {
		if ( Lv->GetCheck( nRow ) ) {
			bExist = true;
			Query->operator = (Buff);
			Lv->GetColumnText( 1, Item );
			Item->Enclose( "'" );
			Query->operator += (Item);
			if ( !(CurDb->Query( Query )) ) {
				Dlg->MsgOk("データベースの更新に失敗しました    ");
				CurDb->DisConnect();
				return false;
			}
		}
	}

	CurDb->DisConnect();

	if ( !bExist ) {
		Dlg->MsgOk("対象データが存在しません    ");
		return false;
	}

	return true;
}

// *********************************************************
// 問合せ実行
// *********************************************************
BOOL App_51::DataRequest( void )
{
	BOOL bRet;

	bRet = true;

	if ( !CurDb->Connect() ) {
		Dlg->MsgOk("データベースの接続に失敗しました    ");
		return false;
	}	

	Query->operator = ("select * from 商品分類マスタ");
	Dlg->EditGetText( IDC_COND, Item );
	Item->Trim("  ");
	if ( Item->operator != ("") ) {
		Item->Enclose( "%" );
		Item->Enclose( "'" );
		Query->operator += (" where 名称 like ");
		Query->operator += (Item);
	}
	if ( Column->operator == ( "" ) ) {
		Query->operator += (" order by 商品分類");
	}
	else {
		Query->operator += (" order by ");
		Query->operator += (Column);
	}

	Lv->Hide();
	CurDb->LoadSqlData( Lv, 1 , Query );
	Lv->Fit();
	Lv->Show();

	CurDb->DisConnect();

	return bRet;
}
  



  Dialog_51.cpp

  
#include "stdafx.h"

#include "App_51.h"

static App_51 *CurApp;
static LboxListview *Lview;
// *********************************************************
// ダイアログの処理
// *********************************************************
LRESULT CALLBACK Dialog_51(
HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch( message ) {
		case WM_INITDIALOG:
			bEnd = false;

			Lview = new LboxListview(
				GetDlgItem( hDlg, IDC_LIST ),
				LBOX_LISTVIEW_EDITABLE
			);
			Lview->Grid( );
			Lview->SetFont( 0, 9, false );
			// チェックボックスの実装
			Lview->ApplyCheckbox( true );
			// ポップアップメニューを実装
			Lview->CreatePopup( IDR_ACTION, 0 );

			CurApp = new App_51( hDlg, Lview );
			// 初期フォーカス
			Dlg->EditFocus( IDC_COND );
			return FALSE;

		case LBOX_RETURN:
			// Enter キーをタブ扱いしないコントロール
			if ( Dlg->GetHandle( IDC_CHECK ) == (HWND)wParam ) {
				break;
			}
			Tool.TabKey();
			break;

		case LBOX_LV_HEADCLICK:
			if ( (int)lParam != 0 ) {
				Lview->GetColumnTitle( (int)lParam, Column );
				if ( Tool.IsShift() ) {
					Column->operator += (" desc ");
				}
				CurApp->DataRequest();
			}
			break;

		// リストビューの通知イベント
		case WM_NOTIFY:
			if ( Lview != NULL ) {
				Lview->Notify( hDlg, lParam );
			}
			break;

		case WM_COMMAND:
			// 終了
			if( LOWORD(wParam) == IDCANCEL ) {
				bEnd = true;
				delete Lview;
				delete CurApp;
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}

			// ABOUT
			if( LOWORD(wParam) == IDM_ABOUT ) {
				DialogBox(
					hInst,
					(LPCTSTR)IDD_ABOUTBOX,
					hDlg,
					(DLGPROC)About
				);
			}

			// アプリケーションの終了
			if( LOWORD(wParam) == IDM_EXIT ) {
				Dlg->SendMsg(
					WM_COMMAND,
					MAKEWPARAM( IDCANCEL, 0 ),
					0
				);
			}

			// 選択行をチェック
			if ( LOWORD(wParam) == IDM_ON ) {
				CurApp->SelectCheck();
			}

			// 選択行のチェックを外す
			if ( LOWORD(wParam) == IDM_OFF ) {
				CurApp->SelectCheckOff();
			}

			// 削除
			if ( LOWORD(wParam) == IDM_DELETE ) {
				// 本当は、ここで未選択のチェックを行います
				GetMessageString( "0102" );
				if ( Dlg->MsgOkCancel( Message ) ) {
					if ( CurApp->DeleteData() ) {
						GetMessageString( "5001" );
						Dlg->StatusSetText(Message);
						CurApp->DataRequest();
						Dlg->EditFocus( IDC_COND );
					}
				}
			}

			// 検索
			if ( LOWORD(wParam) == IDC_CHECK ) {
				CurApp->DataRequest();
			}

			// クリア
			if ( LOWORD(wParam) == IDC_CLEAR ) {
				Dlg->EditSetText( IDC_COND, "" );
				Lview->Reset();
			}

			// ステータスバーのクリア
			if ( LOWORD(wParam) == IDC_COND ) {
				if ( bEnd ) {
					break;
				}
				if ( HIWORD(wParam) == EN_KILLFOCUS ) {
					Dlg->StatusSetText("");
				}
			}
			break;
	}
	return FALSE;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ