first I have create a
UserLogin Table
CREATE TABLE [dbo].[UserLogin](
[UserId] [int] IDENTITY(1,1) PRIMARY KEY,
[UserName] [varchar](100) NULL,
[UserEmail][varchar](100) NULL,
[PhoneNumber][varchar](100) NULL,
[Address] [varchar](100) NULL,
[Password] [varchar](100) NULL,
)
Create a layout View
layout.cshtml
LAYOUT.Cshtml <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> <link href="~/Content/bootstrap.min.css" rel="stylesheet" /> <script src="~/Scripts/jquery-2.2.3.min.js"></script> <script src="~/Scripts/bootstrap.min.js"></script> <script src="~/ext-6.0.2/build/ext-all.js"></script> <link href="~/ext-6.0.2/build/classic/theme-neptune/resources/theme-neptune-all.css" rel="stylesheet" /> <link href="~/Content/Site.css" rel="stylesheet" /> <script src="~/Scripts/site.js"></script> </head> <body> <!--/.navbar --> <nav class="navbar navbar-inverse sidebar" role="navigation"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">MindStick</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">Home<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-home"></span></a></li> <li ><a href="#" id="UserProfile" class="UserProfile">Users<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-user"></span></a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Settings<span class="caret"></span><span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-cog"></span></a> <ul class="dropdown-menu forAnimate" role="menu"> <li><a href="#">Action</a></li> <li><a href="#">Help</a></li> <li><a href="#">LogOut</a></li> </ul> </li> </ul> </div> </div> </nav> <div class="main" id="page"> @RenderBody() </div> </body> </html>
Create a index view where user can login and go to Dashboard.
Index.cshtml @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/ext-6.0.2/build/ext-all.js"></script> <link href="~/ext-6.0.2/build/classic/theme-neptune/resources/theme-neptune-all.css" rel="stylesheet" /> <script src="~/App/Login.js"></script> </head> <body> <div> </div> </body> </html>
It is user.js file which work for user
login page.
Login.js /// <reference path="../ext-6.0.2/build/ext-all.js" /> Ext.onReady(function(){ var login = new Ext.FormPanel({ labelWidth:100, url: 'api/values', header : false, frame:false, title:'Login', defaultType: 'textfield', bodyStyle: 'background:url(images/login.png) no-repeat; padding:20px;', monitorValid:true, items:[{ fieldLabel:'UserID', name: 'UserEmail', width: 400, fieldStyle: 'background-color: #fff; background-image: none;', allowBlank:false },{ fieldLabel:'Password', name: 'Password', inputType: 'password', width:400, allowBlank:false }], // All the magic happens after the user clicks the button buttons:[{ text:'Login', formBind: true, // Function that fires when user clicks the button handler:function(){ login.getForm().submit({ method:'POST', waitTitle:'Connecting', waitMsg:'Sending data...', success: function () { Ext.Msg.alert('Status', 'Login Successful!', function(btn, text){ if (btn == 'ok'){ var redirect = 'Home/dashboard'; window.location = redirect; } }); }, failure:function(form, action){ Ext.Msg.alert('Status', 'Login failed!'); } }); } }] }); var win = new Ext.Window({ title: 'Admin Login', layout:'fit', width:450, height:200, closable: true, resizable: false, border: false, buttonAlign: 'center', items: [login] }); win.show(); });
User Login InterFace. Here user input
userid and password click to login.
public bool Post(UserLogin obj) { bool success; var result = db.UserLogin.FirstOrDefault(x => x.UserEmail == obj.UserEmail && x.Password == obj.Password); if (result != null) { success = true; } else { success =false; } return success; }
Login success click ok go to dashboard
page.
Dashboard.cshtml @{ ViewBag.Title = "dashboard"; Layout = "~/Views/Shared/_Layout.cshtml"; } <script src="~/App/dashboard.js"></script> <script src="~/App/Users.js"></script> <style> .add{ background: url('http://www.famfamfam.com/lab/icons/silk/icons/add.png') no-repeat; } .delete{ background: url('http://www.famfamfam.com/lab/icons/silk/icons/delete.png') no-repeat; } </style>
It is dashboard.js file
which is work for Dashboard page.
Dashboard.js Ext.define('PagePanel', { extend: 'Ext.panel.Panel', height: '100%', renderTo: Ext.getBody(), title: 'Dashboard', layout: { type: 'table', columns: 1, tableAttrs: { style: { width: '100%', height: '100%' } }, tdAttrs: { style: { border: '1px solid black' } } }, listeners : { afterrender : function(panel) { var header = panel.header; header.setHeight(51); } }, initComponent: function () { this.callParent(arguments); this.add({ xtype: 'container', style: { height: '100%' } }); } }); Ext.onReady(function () { Ext.create('PagePanel'); });
It is user.js file use for
user list where we can create, edit, update,delete record.
User.js Ext.define('MyApp.model.User', { extend: 'Ext.data.Model', fields: ['UserId', 'UserName', 'UserEmail', 'PhoneNumber', 'Address', 'Password'], }); var Store=Ext.define('MyApp.store.Users', { extend: 'Ext.data.Store', model: 'MyApp.model.User', proxy: { type: 'ajax', url: '/api/dashboard', reader: { type: 'json', root: 'Users', totalProperty: 'TotalCount' } }, remoteSort: true, sorters: [{ property: 'UserName', direction: 'asc' }], autoLoad: { start: 0, limit: 5 }, pageSize: 5, }); Ext.define('MyApp.controller.Users', { extend: 'Ext.app.Controller', refs: [ { ref: 'UserGrid', selector: 'UserGrid' }, { ref: 'DelUserBtn', selector: 'UserGrid button[action=deleteUser]' } ], init: function () { this.control({ 'UserGrid': { itemdblclick: this.onUserGridItemDblClick, selectionchange: this.onUserGridSelectionChange }, 'UserGrid button[action=addUser]': { click: this.onAddUserClick }, 'UserGrid button[action=deleteUser]': { click: this.onDelUserClick }, 'UserForm button[action=saveUser]': { click: this.onSaveUserClick } }); }, onDelUserClick: function (button) { var grid = button.up('grid'), selection = grid.getSelectionModel().getSelection(); Ext.Array.each(selection, function (model, index) { Ext.Ajax.request({ url: '/api/dashboard/'+ model.data.UserId, method: 'DELETE', success: function () { model.destroy(); }, failure: function () { } }); }); grid.store.load(); }, onUserGridSelectionChange: function (grid, selected) { this.getDelUserBtn().setDisabled(selected.length === 0); }, onUserGridItemDblClick: function (grid, record, item) { this.showUserForm(record); }, onAddUserClick: function () { var newUser = Ext.create(MyApp.model.User); this.showUserForm(newUser); }, showUserForm: function (model) { var userWin = Ext.create('MyApp.view.UserForm'), form = userWin.down('form'); form.loadRecord(model); userWin.show(); }, onSaveUserClick: function (button) { var self = this; var form = button.up('form'), win = form.up('window'), data = form.getValues(), user = form.getRecord(); Ext.Ajax.request({ url: '/api/dashboard', method: 'POST', jsonData:form.getValues(), success: function () { self.getUserGrid().store.load(); }, failure: function() { } }); win.destroy(); } }); Ext.define('MyApp.view.UserForm', { extend: 'Ext.window.Window', xtype: 'UserForm', modal: true, layout: 'fit', height: 300, width: 400, title: 'UserForm', items: [ { xtype: 'form', bodyPadding: 5, items: [ { xtype: 'fieldset', title: 'User Info', defaults: { xtype: 'textfield', labelWidth: 100, width: 300 }, items: [ { name: 'UserId', hidden: true }, { fieldLabel: 'Name', name: 'UserName', sortable : true, }, { fieldLabel: 'Email', sortable: false, name: 'UserEmail' }, { fieldLabel: 'Phone', sortable: false, name: 'PhoneNumber' }, { fieldLabel: 'Address', sortable: false, name: 'Address' }, { fieldLabel: 'Password', name: 'Password', sortable: false, } ] } ], buttons: [ { text: 'Save', action: 'saveUser' } ] } ] }); Ext.define('MyApp.view.UserGrid', { extend: 'Ext.grid.Panel', xtype: 'UserGrid', title: 'Users', store: 'Users', multiSelect: true, utoScroll: true, listeners: { beforeclose: function (win) { Ext.currentApp = false; } } , columns: [ { text: 'Name', dataIndex: 'UserName', flex: 1 }, { text: 'Email', dataIndex: 'UserEmail', flex: 1 }, { text: 'Phone', dataIndex: 'PhoneNumber', flex: 1 }, { text: 'Address', dataIndex: 'Address', flex: 1 }, { text: 'Password', dataIndex: 'Password', flex: 1 } ], tbar: [ { text: 'Add', iconCls: 'add', action: 'addUser' }, { text: 'Delete', iconCls: 'delete', action: 'deleteUser', disabled: true } ], bbar: [{ xtype: 'pagingtoolbar', store: 'Users', displayInfo: true, displayMsg: 'Displaying {0} to {1} of {2} records ', emptyMsg: "No records to display " }], height:820, width: 400, closable: true, renderTo: Ext.getBody() }); Ext.onReady(function () { Ext.get('UserProfile').on('click', function (e, t) { if (Ext.currentApp) { Ext.Msg.alert('Application Alert', 'window is already open !', function (btn, text) { if (btn == 'ok') { return; } }); return; } Ext.currentApp = new Ext.application({ name: 'MyApp', height: 1000, width: '100%', controllers: [ 'Users' ], stores: [ 'Users' ], launch: function () { Ext.create('Ext.panel.Panel', { layout: 'fit', autoScroll: true, renderTo: 'container-1010-innerCt', items: [ { xtype: 'UserGrid' } ] }); } }); }); });
This is dashboard
page output
This method get userlist . and we can use paging
and shorting.
public class ModelList { public IEnumerable<UserLogin> Users { get; set; } public int TotalCount { get; set; } } public ModelList Get(int start, int limit, string sort) { ModelList result = new ModelList(); var data = db.UserLogin.AsQueryable(); result.Users = data.OrderBy(x => x.UserName).Skip(start).Take(limit).ToList(); result.TotalCount = data.Count(); return result; }
This is dashboard
user list output.
This is add new user form output.
This
is edit user form Output.
This method use for add,update user.
public void Post(UserLogin obj) { var original = db.UserLogin.Find(obj.UserId); if (original != null) { original.UserName = obj.UserName; original.UserEmail = obj.UserEmail; original.PhoneNumber = obj.PhoneNumber; original.Password = obj.Password; original.Address = obj.Address; } else { db.UserLogin.Add(obj); } db.SaveChanges(); }
public void Delete(int id) { var original = db.UserLogin.Find(id); if (original != null) { db.UserLogin.Remove(original); } db.SaveChanges(); }
Elena Glibart
17-Apr-2017