ระบบ LogIn ใน
Windows Form Application ซึ่งผมได้สร้างข้อมูลใน Table “Users” ไว้แล้ว โดยมีข้อมูลดังนี้คือ
คอลัมม์ UserID: 1 ,
UserName: admin,
UserPassword: admin,
UserEmail: admin@admin.com
เริ่มต้นก็ทำการสร้างฟอร์มหลักขึ้นมา โดยคลิกขวาที่
ชื่อโปรเจกค์ > add new item> windows form ตั้งชื่อ(Name) ว่า
frmMain.cs ซึ่ง แล้วลากเอาคอมโพเน้นชื่อว่า MenuStrip กับ StatusbarStrip มาวางไว้ด้านบนและล่างของฟอร์มเพื่อเพิ่มชื่อ นาฬิกา
โดยหลักการ LogIn คือ ให้ฟอร์มของหน้า logIn เด้งขึ้นมาก่อนเพื่อรอการ Authentication หากล็อกอินสำเร็จก็จะผ่านเข้าสู่หน้าเมนหลัก แล้วแสดงชื่อของผู้ใช้งานในปัญจุบัน ภายใต้ status bar
เริ่มต้นโดยการสร้าง Windows Form ใหม่ขึ้นมาหนึ่งอัน คลิกลาก Label เข้ามาวางภายในฟอร์ม 2 อัน (Username กัน Password) และ EditText อีกสองอันเช่นเดียวกัน เพื่อให้ผู้ใช้กรอกข้อมูลทั้งหมด และปุ่ม OK และ Cancel ซึ่งเราจะเข้ามาสร้าง behavior ทีหลัง อ๋อ อย่าลืม ตั้งชื่อ (Name) ให้กับ text ด้วย
ดับเบิลคลิกที่ form เพื่อสร้าง ฟังชั่น On load
private void frmMain_Load(object sender, EventArgs e)
{
this.Hide();
timer1.Start();
dlgLogin dlg = new dlgLogin();
if (dlg.ShowDialog() == DialogResult.OK)
{
this.CurrentUser = dlg.CurrentUser;
if (this.CurrentUser != null)
{
lblLogonUser.Text = "Logon User : " +
this.CurrentUser.Username;
}
this.Show();
}
else
{
Application.Exit();
}
}
ถ้า เราคลิกปุ่ม OK คลาส dlgLogin จะ return ค่า DialogResult.OK มีโค๊ดดังนี้
public partial class dlgLogin : Form
{
public User CurrentUser { get; set; }
SampleEntities db;
public dlgLogin()
{
InitializeComponent();
db = new SampleEntities();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//
Authen user
var result = from it in db.Users
where it.Username ==
txtUsername.Text && it.Password == txtPassword.Text
select it;
if (result != null && result.Count() > 0)
{ //
Pass
CurrentUser = result.First();
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
else
{
MessageBox.Show("Username หรือ Password ไม่ถูกต้อง", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
}
private void txtUsername_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
txtPassword.Select();
}
}
private void txtPassword_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnLogin.PerformClick();
}
}
}
โค๊ด LINQ ในการเช็คค่า username password คือ
var result = from it in db.Users
where it.Username ==
txtUsername.Text && it.Password == txtPassword.Text
select it;
แปลงได้ ภาษา SQL คือ “SELECT * FROM USERS WHERE USERNAME == username AND PASSWORD == password ซึ่งหากค่าที่ return กลับไม่เป็น 1 แสดงว่า มียูเซอนั้นและการ Authen สำเร็จ
กลับมาที่หน้า Class หลัก frmMain.cs เพื่อ ปุ่มลงไปข้างบน ชื่อว่า User เพื่อดึงเอาข้อมูล User มาแสดง โดยสร้าง Class ใหม่ขึ้นมาชื่อว่า “frmUsers.cs” (add new item > windows form) ซึ่งมีโค๊ดดังนี้
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SampleWinForm.Forms
{
public partial class frmUserList : Form
{
public frmUserList()
{
InitializeComponent();
}
private void frmUserList_Load(object sender, EventArgs e)
{
DoLoadData();
}
private void DoLoadData()
{
using (var db = new SampleEntities())
{
List<User> users = (from it in db.Users
select it).ToList();
gridControl.DataSource = users;
}
}
private void gridView_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
List<User> users = gridControl.DataSource as List<User>;
if (users == null)
return;
User user = users[gridView.FocusedRowHandle];
frmUserInfo frm = new frmUserInfo();
frm.UserID = user.UserID;
if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
DoLoadData();
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
using(var db = new SampleEntities()){
frmUserInfo frm = new frmUserInfo();
frm.UserID = 0;
if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
DoLoadData();
}
}
}
}
}
ฟังชั่น DoLoadData จะถูกเรียกขึ้นใหม่ทุกครั้งเมื่อมีการเรียกใช้ และแสดงข้อมูลในกริด อย่าลืมสร้างปุ่ม add ไว้เพิ่ม user ใหม่ ซึ่งต้องสร้าง class ใมห่ชื่อว่า frmUserInfo.cs โค๊ดมีดังนี้
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SampleWinForm.Forms
{
public partial class frmUserInfo : Form
{
public int UserID = 0;
SampleEntities db = new SampleEntities();
public frmUserInfo()
{
InitializeComponent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = System.Windows.Forms.DialogResult.Cancel;
}
private void btnSave_Click(object sender, EventArgs e)
{
User user = null;
if (UserID == 0)
{
user = new User();
db.Users.Add(user);
}
else
{
var result = (from it in db.Users
where it.UserID == UserID
select it).ToList();
if (result.Count() > 0)
{
user = result.First();
}
}
user.Username = txtUsername.Text;
user.Password = txtPassword.Text;
user.Email = txtEmail.Text;
if (db.SaveChanges() > 0)
{
DialogResult =
System.Windows.Forms.DialogResult.OK;
}
else
{
MessageBox.Show("Save
Failed.");
}
}
private void frmUserInfo_Load(object sender, EventArgs e)
{
if (UserID > 0)
{
var result = (from it in db.Users
where it.UserID == UserID
select it).ToList();
if (result.Count() > 0)
{
txtUsername.Text =
result.First().Username;
txtPassword.Text =
result.First().Password;
txtEmail.Text =
result.First().Email;
}
}
}
}
}
เดียวเพิ่มเติมให้กับหน้า LogIn >> บทความนี้ ละเอียดยังไม่พอ ยังไง ก็ติดตามกันด้วยนะครับ