how to create a Master/Detail HTML GRID 여기 들어가시면 강좌가 존재하는데, 여기 코드에 MVC 와 AngularJs 를 적용해 보는 시간을 가져보도록 하겠습니다.
강좌를 기재하기 앞서, 아래와 같은 목차를 두고 설명하겠습니다.
This article will explain:
Prerequisites
Visual Studio 2015 - You can download it from here.
You can also view my previous articles related to AngularJs using MVC and the WCF Rest Serice.
Description
1. Create Database and Table (테이블 생성)
SQL Server 2014 에 아래와 같은 테이블을 생성합니다.
SQL
use master
--create DataBase
-- 1) Check for the Database Exists .If the database is exist then drop and create new DB
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'OrderManagement' )
DROP DATABASE OrderManagement
GO
CREATE DATABASE OrderManagement
GO
USE OrderManagement
GO
-- Create OrderMasters Table
CREATE TABLE [dbo].[OrderMasters](
[Order_No] INT IDENTITY PRIMARY KEY,
[Table_ID] [varchar](20) NOT NULL,
[Description] [varchar](200) NOT NULL,
[Order_DATE] [datetime] NOT NULL,
[Waiter_Name] [varchar](20) NOT NULL
)
-- Insert OrderMasters sample data
INSERT INTO [OrderMasters]
([Table_ID] ,[Description],[Order_DATE],[Waiter_Name])
VALUES
('T1','Order for Table T1',GETDATE(),'SHANU' )
INSERT INTO [OrderMasters]
([Table_ID] ,[Description],[Order_DATE],[Waiter_Name])
VALUES
('T2','Order for Table T2',GETDATE(),'Afraz' )
INSERT INTO [OrderMasters]
([Table_ID] ,[Description],[Order_DATE],[Waiter_Name])
VALUES
('T3','Order for Table T3',GETDATE(),'Afreen')
CREATE TABLE [dbo].[OrderDetails](
[Order_Detail_No] INT IDENTITY PRIMARY KEY,
[Order_No] INT,
[Item_Name] [varchar](20) NOT NULL,
[Notes] [varchar](200) NOT NULL,
[QTY] INT NOT NULL,
[Price] INT NOT NULL
)
--Now let’s insert the 3 items for the above Order No 'Ord_001'.
INSERT INTO [OrderDetails]
( [Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(1,'Ice Cream','Need very Cold',2 ,160)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(1,'Coffee','Hot and more Suger',1 ,80)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(1,'Burger','Spicy',3 ,140)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(2,'Pizza','More Chees and Large',1 ,350)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(2,'Cola','Need very Cold',3 ,50)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(3,'IDLY','Hot',3 ,40)
INSERT INTO [OrderDetails]
([Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
(3,'Thosa','Hot',3 ,50)
-- To Select and test Order Master and Details
Select * FROM OrderMasters
Select * From OrderDetails
테이블을 생성한 후, Master 를 위한 저장프로시저를 생성하는 쿼리 실행 합니다.
-- 1) Stored procedure to Select OrderMaster
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderMaster
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderMaster_Select '',''
-- =============================================
Create PROCEDURE [dbo].[USP_OrderMaster_Select]
(
@OrderNo VARCHAR(100) = '',
@Table_ID VARCHAR(100) = ''
)
AS
BEGIN
Select [Order_No],
[Table_ID],
[Description],
[Order_DATE],
[Waiter_Name]
FROM
OrderMasters
WHERE
Order_No like @OrderNo +'%'
AND Table_ID like @Table_ID +'%'
ORDER BY
Table_ID
END
-- 2) Stored procedure to insert OrderMaster
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderMaster
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderMaster_Insert 'T4','Table 4','SHANU'
-- =============================================
Create PROCEDURE [dbo].[USP_OrderMaster_Insert]
(
@Table_ID VARCHAR(100) = '',
@Description VARCHAR(100) = '',
@Waiter_Name VARCHAR(20) = ''
)
AS
BEGIN
IF NOT EXISTS (SELECT Table_ID FROM OrderMasters WHERE Table_ID=@Table_ID)
BEGIN
INSERT INTO [OrderMasters]
([Table_ID] ,[Description],[Order_DATE],[Waiter_Name])
VALUES
(@Table_ID,@Description,GETDATE(),@Waiter_Name )
Select 'Inserted' as results
END
ELSE
BEGIN
Select 'Exists' as results
END
END
-- 3) Stored procedure to Update OrderMaster
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderMaster
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderMaster_Update 4,'T4','Table 4 wer','SHANU'
-- =============================================
CREATE PROCEDURE [dbo].[USP_OrderMaster_Update]
( @OrderNo Int=0,
@Table_ID VARCHAR(100) = '',
@Description VARCHAR(100) = '',
@Waiter_Name VARCHAR(20) = ''
)
AS
BEGIN
IF NOT EXISTS (SELECT Table_ID FROM OrderMasters WHERE Order_No!=@OrderNo AND Table_ID=@Table_ID)
BEGIN
UPDATE OrderMasters
SET [Table_ID]=@Table_ID ,
[Description]=@Description,
[Order_DATE]=GETDATE(),
[Waiter_Name]=@Waiter_Name
WHERE
Order_No=@OrderNo
Select 'updated' as results
END
ELSE
BEGIN
Select 'Exists' as results
END
END
-- 4) Stored procedure to Delete OrderMaster
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderMaster
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderMaster_Delete '3'
-- =============================================
CREATE PROCEDURE [dbo].[USP_OrderMaster_Delete]
( @OrderNo Int=0 )
AS
BEGIN
DELETE FROM OrderMasters WHERE Order_No=@OrderNo
DELETE from OrderDetails WHERE Order_No=@OrderNo
Select 'Deleted' as results
END
테이블을 생성한 후,Detail 를 위한 저장프로시저를 생성하는 쿼리 실행 합니다.
USE OrderManagement
GO
-- 1) Stored procedure to Select OrderDetails
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : OrderDetails
-- Tables used : OrderDetails
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderDetail_Select '1'
-- =============================================
Create PROCEDURE [dbo].[USP_OrderDetail_Select]
(
@OrderNo VARCHAR(100) = ''
)
AS
BEGIN
Select Order_Detail_No,
[Order_No],
[Item_Name],
[Notes],
[QTY],
[Price]
FROM
OrderDetails
WHERE
Order_No like @OrderNo +'%'
ORDER BY
Item_Name
END
-- 2) Stored procedure to insert OrderDetail
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderDetail
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderDetail_Insert 4,'cadburys','cadburys Chocolate','50',50
-- =============================================
Create PROCEDURE [dbo].[USP_OrderDetail_Insert]
(
@Order_No VARCHAR(10),
@Item_Name VARCHAR(100) = '',
@Notes VARCHAR(100) = '',
@QTY VARCHAR(20) = '',
@Price VARCHAR(20) = ''
)
AS
BEGIN
IF NOT EXISTS (SELECT Item_Name FROM OrderDetails WHERE Order_No=@Order_No AND Item_Name=@Item_Name)
BEGIN
INSERT INTO [OrderDetails]
( [Order_No],[Item_Name],[Notes],[QTY] ,[Price])
VALUES
( @Order_No,@Item_Name,@Notes,@QTY ,@Price )
Select 'Inserted' as results
END
ELSE
BEGIN
Select 'Exists' as results
END
END
-- 3) Stored procedure to Update OrderDetail
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderDetail
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderDetail_Update 8,4,'Cadburys','cadburys Chocolate','50',50
-- =============================================
ALTER PROCEDURE [dbo].[USP_OrderDetail_Update]
( @Order_Detail_No Int=0,
@Order_No VARCHAR(10),
@Item_Name VARCHAR(100) = '',
@Notes VARCHAR(100) = '',
@QTY VARCHAR(20) = '',
@Price VARCHAR(20) = ''
)
AS
BEGIN
IF NOT EXISTS (SELECT Item_Name FROM OrderDetails WHERE Order_Detail_No!=@Order_Detail_No AND Item_Name=@Item_Name)
BEGIN
UPDATE OrderDetails
SET [Item_Name]=@Item_Name,
[Notes]=@Notes,
[QTY] =@QTY,
[Price]=@Price
WHERE
Order_Detail_No=@Order_Detail_No
AND Order_No=@Order_No
Select 'updated' as results
END
ELSE
BEGIN
Select 'Exists' as results
END
END
-- 4) Stored procedure to Delete OrderDetail
-- Author : Shanu
-- Create date : 2015-10-26
-- Description : Order Master
-- Tables used : OrderDetail
-- Modifier : Shanu
-- Modify date : 2015-10-26
-- =============================================
-- exec USP_OrderDetail_Delete '8'
-- ============================================
CREATE PROCEDURE [dbo].[USP_OrderDetail_Delete]
( @Order_Detail_No Int=0 )
AS
BEGIN
DELETE from OrderDetails WHERE Order_Detail_No=@Order_Detail_No
Select 'Deleted' as results
END
Visual Studio 2015 설치한 후, web 에서 asp.net web application 을 선택하고 name 을 입력합니다.
asp.net 4.6 templates 에서 mvc 를 선택하고, 하단에 add folders and core reference for : 부분에 web api 도 체크해 줍니다.
ADO.NET ENTITY DATA MODEL 를 사용하기 위해 테이블을 추가합니다.
우클릭 해서 ADD > NEW ITEM 을 선택합니다.
여기서 ADO.NET ENTITY DATA MODEL 을 선택하고 NAME 을 기재후, ADD 합니다.
EF Designer 에서 database 를 선택한 다음 , next 합니다.
database 의 서버 이름을 설정하고, user name, password 를 기재한 후, database name 을 선택합니다. ok 버튼을 선택합니다.
여기서 yes , 를 선택하고 나서 connectionstring 을 민감한 data 로 포함합니다.
이제 테이블을 선택한 다음, 생성한 저장프로시저를 전부 선택하고 finish 를 선택합니다.
그럼, OrderDetailModel.edmx 라는 파일이 생성 되어 집니다.
entity 를 생성하고 나서, 이제 web api 를 controller 에서 추가합니다. 그리고 그 함수에 select , insert, update , delete 를 기술합니다.
web api controller 에 저장프로시저를 추가합니다. controller 폴더에 우클릭해서 controller 를 클릭합니다.
controller 를 선택하고, 여기서 empty web api 2 controller 를 추가합니다. web api controller 이름을 적고, ok 를 클릭합니다. 여기서 web api controller 는 “OrderAPIController” 라고 기재합니다.
데모 프로젝트에서 2개의 다른 controller 를 생성하는데, 하나는 order master , 또 하나는 order detail 입니다.
알다시피 web api 는 브라우저와 모바일에 대한 http 서비스를 간단하고 쉽게 사용할 수 있도록 설계되어 있습니다.
web api 는 메소드가 4가지 제공되며, Get / Post / Put / Delete 가 있습니다.
Get Method
예제에서는 저장프로시저를 사용해서 get 메소드만 사용됩니다. 그래서 entity 에 대한 object 를 생성하고,
Select/Insert/Update and Delete 의 operation 를 하기 위해, Get 메소드를 기재합니다.
Select Operation
entity object 를 사용하기 위해 OrderMasters 의 모든 detail 를 가져오는 메소드로 사용할겁니다. 그리고 이는 IEnumerable 로 결과값을 반환할 것이고요.
이제 AngularJs 안에 해당 메소드를 사용할거고 AngularJs controller 를 통해 mvc 페이지에 결과를 보여줄겁니다. Ng-Repeat 를 사용해서 detail 에 바인딩을 할 수 있습니다.
여기에 검색 파리미터를 전송해서 USP_OrderMaster_Select 저장프로시저를 실행하는 구문은 아래와 같습니다. 저장프로시저에 검색 파라미터값이 없다면 모든 레코드를
반환할 수 있도록 % 를 사용했습니다.WHERE
Order_No like @OrderNo +'%'
AND Table_ID like @Table_ID +'%'
OrderManagementEntities objapi = new OrderManagementEntities(); // to Search Student Details and display the result [HttpGet] public IEnumerable<USP_OrderMaster_Select_Result> Get(string OrderNO, string TableID) { if (OrderNO == null) OrderNO = ""; if (TableID == null) TableID = ""; return objapi.USP_OrderMaster_Select(OrderNO, TableID).AsEnumerable(); }
예제에서 Select/Insert/Update and Delete operations 를 위해 get 메소드를 사용했고, insert/update and delete 를 저장프로시저로 호출해서 database 에 전달하여 결과값을 반환 받았습니다.
Insert Operation
동일하게 insert 저장프로시저에 모든 파라미터를 전송하여 처리했습니다. 그리고 결과값을 얻고 AngularJs Controller 에서 mvc application 를 통해 보여줄겁니다.
// To Insert new Student Details [HttpGet] public IEnumerable<string> insertOrderMaster(string Table_ID,string Description,string Waiter_Name) { return objapi.USP_OrderMaster_Insert( Table_ID, Description, Waiter_Name).AsEnumerable(); }
Update Operation
insert 저장프로시저에 모든 파라미터를 전송 처리 하는 동일한 방법으로 update 메소드도 아래 처럼 구현했습니다.
나머지 설명은 insert 와 동일합니다.
//to Update Student Details
[HttpGet]
public IEnumerable<string> updateOrderMaster(int OrderNo, string Table_ID, string Description, string Waiter_Name)
{
return objapi.USP_OrderMaster_Update(OrderNo, Table_ID, Description, Waiter_Name).AsEnumerable();
}
Delete Operation
삭제 부분입니다.
//to Delete Student Details
[HttpGet]
public IEnumerable<string> deleteOrderMaster(int OrderNo)
{
return objapi.USP_OrderMaster_Delete(OrderNo).AsEnumerable();
}
OrderMasterController 도 동일하게 DetailAPI 처럼 또 다른 controller 를 생성합니다. 이는 detail table 의 CRUD Operations 를 기재하기 위함입니다.
아래는 detailController 를 위한 WEB API 코드 입니다.
OrderMasterController
public class DetailAPIController : ApiController
{
OrderManagementEntities objapi = new OrderManagementEntities();
// to Search Student Details and display the result
[HttpGet]
public IEnumerable<USP_OrderDetail_Select_Result> Get(string OrderNO)
{
if (OrderNO == null)
OrderNO = "0";
return objapi.USP_OrderDetail_Select(OrderNO).AsEnumerable();
}
// To Insert new Student Details
[HttpGet]
public IEnumerable<string> insertOrderDetail(string Order_No, string Item_Name, string Notes, string QTY, string Price)
{
return objapi.USP_OrderDetail_Insert(Order_No, Item_Name, Notes, QTY, Price).AsEnumerable();
}
//to Update Student Details
[HttpGet]
public IEnumerable<string> updateOrderDetail(int Order_Detail_No, string Order_No, string Item_Name, string Notes, string QTY, string Price)
{
return objapi.USP_OrderDetail_Update(Order_Detail_No, Order_No, Item_Name, Notes, QTY, Price).AsEnumerable();
}
//to Delete Student Details
[HttpGet]
public IEnumerable<string> deleteOrderDetail(int Order_Detail_No)
{
return objapi.USP_OrderDetail_Delete(Order_Detail_No).AsEnumerable();
}
}
자 이제, WEB API 컨트롤러 CLASS 를 생성하고, 그다음 AngularJs 의 Module 과 Controller 를 생성하는 겁니다.
AngularJs Controller 를 생성하는 방법은 Visual Studio 2015 에서 쉽게 생성할 수 있습니다.
이제 따라해 보죠.
Creating AngularJs Controller
Script 폴더에 MyAngular 라는 폴더를 만듭니다.
그리고 web 에서 AngularJS Controller 의 template 를 선택하고 Controller.js 라고 이름 기재하고 add 합니다.
AngularJs Controller 를 생성하자마자, 기본값이 아래와 같이 나옵니다.
AngularJs package 가 없을 경우, package 에 AngularJs 를 추가하면 됩니다.
이는 mvc project 에서 우클릭하면 Manage NuGet Packages 가 존재합니다. 이를 클릭해서 “AngularJs “ 를 검색하고 설치하면 됩니다.
Module.js : AngularJs JavaScript 를 참조할 때 사용되며, “RESTClientModule” 이라는 Angular Module 을 생성할겁니다.
// <reference path="../angular.js" />
/// <reference path="../angular.min.js" />
/// <reference path="../angular-animate.js" />
/// <reference path="../angular-animate.min.js" />
var app;
(function () {
app = angular.module("RESTClientModule", ['ngAnimate']);
})();
Controllers : AngularJs Controller 에서 모든 business logic 를 구현하고, web api 에서 mvc html page 에 데이터를 반환하는
부분을 구현하는 곳입니다.
1. Variable declarations : 먼저 사용하는데 필요한 로컬 변수는 여기에 전부 기술합니다.
First I declared all the local variables that need to be used.
app.controller("AngularJs_studentsController", function ($scope, $timeout, $rootScope, $window, $http) {
$scope.date = new Date();
$scope.MyName = "shanu";
//For Order Master Search
$scope.OrderNos = "";
$scope.Table_IDs = "";
//This variable will be used for Insert/Edit/Delete OrderMasters Table.
$scope.OrderNo = 0;
$scope.Table_ID = "";
$scope.Description = "";
$scope.Waiter_Name = "";
//Show Hide OrderMaster Table
$scope.showOrderMasterAdd = true;
$scope.addEditOrderMaster = false;
$scope.OrderMasterList = true;
$scope.showItem = true;
//This variable will be used for Insert/Edit/Delete OrderDetail Table.
$scope.Order_Detail_No = 0;
$scope.Item_Name ="";
$scope.Notes = "";
$scope.QTY = "1";
$scope.Price = "0";
$scope.addEditOrderDetail = false;
$scope.expandImg = "expand.png";
2. Methods
Select Method
select 메소드에서 web api 를 통해 detail 을 얻기 위해선 $http.get 를 사용합니다.
get 메소드에서 API Controller name 을 기재하며, details 를 get 할 메소드를 기재합니다.
검색 파라미터에 OrderNo 와 TableID 를 전달하기 위한 부분을 기술하였습니다.
{ params: { OrderNO: OrderNos, TableID: Table_IDs }
최종 결과는 data-ng-repeat 를 사용해서 mvc html 을 보여주는 것입니다.
$http.get('/api/OrderAPI/', { params: { OrderNO: OrderNos, TableID: Table_IDs } }).success(function (data) {
$scope.OrderMasters = data;
$scope.showOrderMasterAdd = true;
$scope.addEditOrderMaster = false;
$scope.OrderMasterList = true;
$scope.showItem = true;
$scope.addEditOrderDetail = false;
if ($scope.OrderMasters.length > 0) {
}
})
.error(function () {
$scope.error = "An Error has occured while loading posts!";
});
}
Search Button Click
검색 버튼을 클릭하면, 결과 값을 얻기 위해 SearchMethod 를 호출합니다. 검색 text box 에는 ng-model=”OrderNos” 라고 사용된 부분이 있습니다.
AngularJs Controller 에서 ng-model 을 사용하면, textbox 의 입력값을 얻을 수 있습니다. 또는 값을 설정하기도 하고요.
<input type="text" name="txtOrderNos" ng-model="OrderNos" value="" />
<input type="text" name="txtTable_IDs" ng-model="Table_IDs" /><input type="submit" value="Search" style="background-color:#336699;color:#FFFFFF" ng-click="searchOrderMasters()" />
//Search
$scope.searchOrderMasters = function () {
selectOrderMasters($scope.OrderNos, $scope.Table_IDs);
}
Insert new Order Master
ADD New Student Detail 의 버튼을 클릭하면, StudentAdd 테이블이 보이며, 신규 학생 정보를 입력할 수 있도록 화면을 제공합니다.
신규 학생을 위해 학생 id 를 기본값으로 0 할당해서 생성하고, 저장 버튼 클릭하면 save method 를 호출합니다.
// New Student Add Details
$scope.showOrderMasters = function () {
cleardetails();
$scope.addEditOrderDetail = false;
$scope.showOrderMasterAdd = true;
$scope.addEditOrderMaster = true;
$scope.OrderMasterList = true;
$scope.showItem = true;
}
Save method 에서 OrderNo 를 선택해 봅니다. 만약에 OrderNo 가 0 이라고 하면, 신규로 Order Master detail 에 저장됩니다.
그럼, 저장하는 Web API method 이 호출되고 OrderNo 가 0 보다 크면 Order record 값을 읽어서 Update Web API method 에 호출합니다.
Insert Web API Method 에서 모든 입력 파라미터를 전송합니다. 저장프로시저에서 Order 테이블에 값이 존재하는지 체크합니다.
그래서 테이블이 데이터베이스에 존재하지 않으면, 레코드에 저장을 하고 inserted 라고 성공 메시지를 보여줍니다. 존재하면 Exits 라고 반환하고요.
//Save OrderMaster
$scope.saveDetails = function () {
$scope.IsFormSubmitted1 = true;
if ($scope.IsFormValid1) {
if ($scope.OrderNo == 0) {
$http.get('/api/OrderAPI/insertOrderMaster/',
{ params: { Table_ID: $scope.Table_ID,
Description: $scope.Description,
Waiter_Name: $scope.Waiter_Name } }).success(function (data) {
$scope.orderMasterInserted = data;
alert($scope.orderMasterInserted);
cleardetails();
selectOrderMasters('', '');
})
.error(function () {
$scope.error = "An Error has occured while loading posts!";
});
}
else { // to update to the student details
$http.get('/api/OrderAPI/updateOrderMaster/',
{ params: { OrderNo: $scope.OrderNo, Table_ID: $scope.Table_ID,
Description: $scope.Description,
Waiter_Name: $scope.Waiter_Name } }).success(function (data) {
$scope.orderMasterUpdated = data;
alert($scope.orderMasterUpdated);
cleardetails();
selectOrderMasters('', '');
})
.error(function () {
$scope.error = "An Error has occured while loading posts!";
});
}
}
else {
$scope.Message1 = "All the fields are required.";
}
}
Update Order Master
update 는 insert 와 동일하게 작동합니다.
//Edit Order Details
$scope.OrderMasterEdit = function OrderMasterEdit(OrderNoss, Table_IDss, Descriptionss, Waiter_Namess) {
cleardetails();
$scope.OrderNo = OrderNoss;
$scope.Table_ID = Table_IDss
$scope.Description = Descriptionss;
$scope.Waiter_Name = Waiter_Namess;
$scope.addEditOrderDetail = false;
$scope.showOrderMasterAdd = true;
$scope.addEditOrderMaster = true;
$scope.OrderMasterList = true;
$scope.showItem = true;
}
Delete Order Master Details
삭제 버튼을누르면, confirm 창이 뜨고, 삭제할건지 말건지 물어봅니다.
삭제 ok 하면 OrderNo 값이 web api 를 통해 database 의 데이터를 삭제합니다.
//Delete Order master Detail
$scope.OrderMasterDelete = function OrderMasterDelete(OrderNoss) {
cleardetails();
$scope.OrderNo = OrderNoss;
var delConfirm = confirm("Are you sure you want to delete the Order Master " + OrderNoss + " ?");
if (delConfirm == true) {
// alert($scope.OrderNo);
$http.get('/api/OrderAPI/deleteOrderMaster/', { params: { OrderNo: $scope.OrderNo } }).success(function (data) {
// alert(data);
$scope.orderMasterDeleted= data;
alert($scope.orderMasterDeleted);
cleardetails();
selectOrderMasters('', '');
})
.error(function () {
$scope.error = "An Error has occured while loading posts!";
});
}
}
Filter and Sorting Order Master
필터에는 pipe symbol 를 사용해서 ng-repeat 와 함께 추가할 수 있습니다.
ng-repeat 에서 볼 수 있듯이 filter 를 추가했고, filter 를 위해 textbox 의 Model id 를 설정했습니다.
사용자가 textbox 에 값을 입력하면 filter 가 loop 를 돌면서 적용해 주고, 아래와 같이 적절한 값을 보여줍니다.
</tr>
<tr style="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
<td width="100" align="center" colspan="3"> <img src="~/Images/filter.png" /> Filter By </td>
<td width="180" align="center" style="border: solid 1px #FFFFFF; padding: 5px;table-layout:fixed;">
<input ng-model="search.Order_No" placeholder="Order..." width="90"> </td>
<td width="180" align="center" style="border: solid 1px #FFFFFF; padding: 5px;table-layout:fixed;">
<input ng-model="search.Table_ID" placeholder="Table..."> </td>
<td width="200" align="center" style="border: solid 1px #FFFFFF; padding: 5px;table-layout:fixed;"> </td>
<td width="200" align="center" style="border: solid 1px #FFFFFF; padding: 5px;table-layout:fixed;"> </td>
<td width="200" align="center" style="border: solid 1px #FFFFFF; padding: 5px;table-layout:fixed;">
<input ng-model="search.Waiter_Name" placeholder="Name..."> </td>
</tr>
Sorting Order Master
필터에 order by 로 동일한 기술로 구현하였습니다. pipe symbol 을 사용해서 ng-repeat 로 값을 reverse 합니다.
OrderBy 는 pipe symbol 를 사용해서 ng-repeat 를 가지고 추가될 수 있습니다.
ng-repeat 에서 filter 를 통해 search 를 줄 수 있고 , 이는 모든 textbox 의 값을 필터들을 제공할 수 있습니다.
<tbody data-ng-repeat="stds in OrderMasters | filter:search | orderBy:predicate:reverse">
Displaying Order Detail
여기서, Detail 버튼 클릭을 통해, Order Master 안에 Order Detail 그리드를 보여주는 방법입니다.
각 Order Master 의 행을 클릭할면, 행이 activeRow … 즉 활성화에 대해 체크 합니다. 그리고 나서 detail button 이 클릭되어 지고 이는 showNewOrderDetails()
함수를 통해 details 가 보여지게 됩니다.
<tr ng-show="activeRow==stds.Order_No" >
상세 버튼이 클릭되면 호출되는 함수임
<input type="button" value="Add Detail" style="background-color:#439633;color:#FFFFFF;
font-size:large;width:100px;border-color:#a2aabe;border-style:dashed;border-width:2px;"
ng-click="showNewOrderDetails()" />
// New Detail Add
$scope.showNewOrderDetails = function () {
clearOrderdetails();
$scope.showOrderMasterAdd = false;
$scope.addEditOrderMaster = false;
$scope.OrderMasterList = true;
$scope.showItem = true;
$scope.addEditOrderDetail = true;
}
Order Detail CRUD 에 대해, 동일한 로직으로 정렬, filter 도 구현하고 사용해 왔습니다. 이제 결과값을 볼까요?
Order Detail Add:
Order Detail Edit:
Order Detail Delete:
Order Detail Filtering and Sorting:
Source Code Files
The main aim of this article is to create a simple MVC Web Based Master/Detail CRUD,Filtering and Sorting Operation using Angular JS WEB API 2 with Stored Procedure.
ASP.net MVC Awesome 알아보기 (http://aspnetawesome.com/) (3) | 2015.12.01 |
---|---|
log4net 2.0.4 에서 로그파일 년월일로 파일 생성하기 (0) | 2015.11.19 |
ASP.NET Identity 의 google 인증 처리시 google+ api 활성화 해야 함 (0) | 2015.10.26 |
Angular js with ASP.NET MVC Insert,Update, Delete (0) | 2015.10.02 |
ASP.NET 5 MVC 6 으로 Captcha 만들어보기 (0) | 2015.09.03 |