our notes for our youngers

March 18, 2010

Formatted TextBox

Filed under: ASP.NET, Javascript — sevenlamp @ 4:52 PM

Formatted TextBox

ဒီေန႔ ရံုးမွာ program ေရးေနရင္းနဲ႔ entry form မွာ သံုးမယ့္ textbox တခ်ိဳဳ႕မွာ ကိုယ္လိုခ်င္တဲ႔ charactor ကိုပဲ ေရြးၿပီး ရိုက္ခြင့္ျပဳခ်င္တယ္။ ခြင့္မျပဳတဲ႔ charactor ေတြကို ရိုက္ရင္ ဘာမွ မေပၚေစခ်င္ဘူး။ အဲ့ဒီလို လုပ္ဖို႔ လိုလာတယ္။ ဥပမာဗ်ာ…. textbox ထဲမွာ ‘#’, ‘?’, ‘*’ only ပဲ ရိုက္ခြင့္ျပဳခ်င္တယ္ေပါ့။ အရင္တုန္းက project အေဟာင္းမွာေတာ့ numeric only ပဲရိုက္လို႔ရတဲ႔ textbox မ်ိဳးလုပ္ထားတာ ရွိတယ္။ အဲ့ဒီမွာ လုပ္တုန္းက htc file ကို သံုးၿပီးလုပ္ထားတာ။ htc က Firefox မွာ support မလုပ္ဘူး။ ဒါေၾကာင့္ အခုတစ္ေခါက္ေတာ့ ရို္းရိုး javascript နဲ႔ပဲ ထိန္းဖို႔ လုပ္လိုက္တယ္။ ဒါနဲ႔ Google အားကိုးလို႔ Internet ထဲမွာ ရွာေဖြဖတ္ရႈၿပီး ေရးလုိက္ပါတယ္။ browser အားလံုး support လုပ္ေအာင္ ေရးရတာလည္း နည္းနည္းေတာ့ လုပ္ေပါက္ကပ္သား။

function numericTextBox(e) {

e = e || window.event;

var key = e.which || e.keyCode;

if ((!e.shiftKey && (key > 47 && key < 58)) || key == 8 || key == 46 || key == 35 || key == 36 || key == 37 || key == 39) {

return true;

} else {

if (e.preventDefault) e.preventDefault();

e.returnValue = false;

return false;

}

}

function FormatedTextBox(e) {

e = e || window.event;

var key = e.which || e.keyCode;

if ((e.shiftKey && (key == 56 || key == 51 || key == 52)) || key == 8 || key == 46 || key == 35 || key == 36 || key == 37 || key == 39) {

return true;

} else {

if (e.preventDefault) e.preventDefault();

e.returnValue = false;

return false;

}

}

aspx code

<asp:TextBox runat=”server” Width=”200px” onkeydown=”return FormatedTextBox(event)“></asp:TextBox>

<asp:TextBox runat=”server” Width=”200px” onkeydown=”return numericTextBox(event)></asp:TextBox>

Javascript မွာ key code number ေတြကို အေသးစိတ္သိခ်င္ရင္ ဒီ(http://unixpapa.com/js/key.html) မွာ ၾကည့္လို႔ရပါတယ္။

Javascript event object အေၾကာင္းကိုေတာ့ ဒီ(http://www.exforsys.com/tutorials/javascript/javascript-event-object.html) ကေနၾကည့္လို႔ ရပါတယ္။

March 12, 2010

Simple Book Store (Part 2)

Filed under: ASP.NET — Tags: , — sevenlamp @ 10:22 AM

ကြၽန္ေတာ္တို႔ DataBase ေဆာက္လို႔ ၿပီးၿပီဆိုေတာ့ အခု program နဲ႔ ခ်ိတ္ပါ့မယ္။ web application နဲ႔ database ခ်ိတ္ၿပီး data input/output လုပ္ဖို႔အတြက္ နည္းလမ္းေတြ အမ်ားႀကီးရွိပါတယ္။ အဲ့ဒီထဲကမွ ကြၽန္ေတာ္အခု ObjectDataSource သံုးၿပီး ခ်ိတ္ဆက္ျပပါမယ္။ ObjectDataSource သံုးမယ္ဆိုရင္ အလြယ္ဆံုးနည္းကေတာ့ DataSet နဲ႔ တြဲၿပီးသံုးတဲ႔ နည္းပဲ ျဖစ္ပါတယ္။ DataSet ေဆာက္တာကို အရင္ပိုဒ့္ေတြမွာ ကြၽန္ေတာ္ရွင္းျပၿပီးသားျဖစ္တဲ႔အတြက္ အခုကြၽန္ေတာ္ အၾကမ္းပဲ ေျပာသြားပါ့မယ္။

Dataset Creation Process

၁ – solution explorer ထဲက project name ကို right click လုပ္ၿပီး ‘Add new items’ ကိုႏွိပ္လိုက္ပါ။  ေပၚလာတဲ႔ window ထဲမွာ DataSet ကိုေရြးၿပီး Add လုပ္လိုက္ပါ။ ( App_Code ထဲကို ထည့္မလား ေမးရင္ ထည့္မယ္လို႔သာ ေျပာလိုက္ပါ။ )

၂ – Dataset ရၿပီးရင္ ToolBox ထဲကေန TableAdapter ေဆာက္ပါ။ TableAdapter ေဆာက္ရင္ ပထမဆံုး Database နဲ႔ connection ယူရပါတယ္။ ( ပထမဆံုး တစ္ႀကိမ္မွာ new connection ယူၿပီး save ထားလိုက္ရင္ ေနာက္အႀကိမ္ေတြမွာ new connection ယူစရာ မလိုေတာ့ပါဘူး၊ Auto ေရြးေပးပါလိမ့္မယ္။)

၃ – connection ရၿပီဆိုရင္ SQL Statement ကိုေရြးၿပီး ေနာက္တစ္ဆင့္မွာ ကြၽန္ေတာ္လိုခ်င္တဲ႔ Table ကိုေရြးၿပီး select query ေရးေပးရပါမယ္။ (ဒီေနရာမွာ တစ္ခုသတိထားဖို႔လိုတာက TableAdapter ေဆာက္တဲ႔ အခ်ိန္မွာ ေရးတဲ႔ ပထမဆံုး select query မွာ (1) All Column(*) ကိုပဲေရြးပါ။ (2) Table မ join ပါနဲ႔။) ဘာလို႔လဲ ဆိုေတာ့ Table join လုိက္ရင္ Insert, Update, Delete Query ေတြကို compiler က auto မေဆာက္ေပးေတာ့ပါဘူး။ Search Page ေတြ၊ List Page ေတြအတြက္ Table Join ဖို႔လိုအပ္ရင္ ေနာက္မွ New Query ယူၿပီး Select လုပ္ပါ။ ပထမဆံုး Query မွာေတာ့ Table မ Join ပါနဲ႔။ အေရးႀကီးတာ တစ္ခု ေျပာဖို႔ က်န္ေသးတယ္။ ကြၽန္ေတာ္တို႔ Database ထဲမွာ table ေတြ ေဆာက္တုန္းက Primary Key ေပးဖို႔လည္း မေမ႔ခဲ႔ပါနဲ႔ဦး။ အကယ္လို႔ primary key မေပးထားခဲ႔ဘူးဆိုရင္ TableAdapter ေဆာက္တဲ႔ အခ်ိန္မွာ Insert Query ပဲ ေရးေပးသြားပါလိမ့္မယ္။ Update နဲ႔ Delete ေတာ့ ေဆာက္ေပးမွာ မဟုတ္ပါဘူး။

၄ – ကြၽန္ေတာ္တို႔ေရးလိုက္တဲ႔ select query အတြက္ function name ေပးရတဲ႔ ေနရာမွာ ကိုယ္ႀကိဳက္တဲ႔ name ေပးလိုက္လို႔ ရပါတယ္။ default အေနနဲ႔ Fill နဲ႔ GetData ဆိုၿပီး function ၂ ခု ေဆာက္ေပးပါလိမ့္မယ္။ ကြၽန္ေတာ္တို႔ မသံုးခ်င္တဲ႔ function ကို ျဖဳတ္ထားလို႔လဲ ရပါတယ္။ Fill function နဲ႔ GetData function ဘာကြာလဲဆိုရင္ ေအာက္မွာ ျပထားတဲ႔ နမူနာ usage ေလးကို ၾကည့္လိုက္ရင္ ရွင္းသြားမွာပါ။

Fill Function Usage

DataSetName ds = new DataSetName(); // data သိမ္းမယ့္ dataset ကို object ေဆာက္ပါတယ္။

TableAdapterName adp = new TableAdapterName(); // function(query) ရွိတဲ႔ Table adapter ကို object ေဆာက္ပါတယ္။

adp.Fill (ds.DataTableName); // Fill function က data သိမ္းမယ့္ dataset ကို parameter အေနနဲ႔ ထည့္ေပးရတယ္။

GetData Function Usage

DataSetName ds = new DataSetName();

TableAdapterName adp = new TableAdapterName();

ds.DataTableName.Merge( adp.GetData() ); // GetData Function ကေတာ့ datatable return ျပန္ၿပီး အဲ့ဒါကို ကိုယ္သိမ္းမယ့္ datasetထဲက table ထဲကို ေပါင္းထည့္ေပးရပါတယ္။

မွတ္ခ်က္။ ။ Database ထဲက table ေတြအတြက္ dataset ေဆာက္တဲ႔ အခါမွာ DataSet ကို တစ္ခုထဲေဆာက္ၿပီး အဲ့ဒီထဲမွာ table တစ္ခုစီအတြက္ TableAdapter တစ္ခုႏႈန္းနဲ႔ TableAdapter ေတြ အမ်ားႀကီးေဆာက္လို႔လည္း ရပါတယ္။ (ဒါမွမဟုတ္) table တစ္ခုအတြက္ DataSet တစ္ခုႏႈန္းနဲ႔ DataSet ေတြ အမ်ားႀကီး ေဆာက္ၿပီးေတာ့ သံုးလည္းရပါတယ္။

pic1

ဒါေလးက ကြၽန္ေတာ္စက္မွာ ေဆာက္ၿပီးသြားတဲ႔ Dataset နဲ႔ TableAdapter ေတြပဲ ျဖစ္ပါတယ္။

March 9, 2010

Simple Book Store (Part 1)

Filed under: ASP.NET — sevenlamp @ 11:08 AM

Simple Book Store

ကြၽန္ေတာ့္ကို Cbox ထဲမွာ ကိုေဇာ္လင္းခိုင္က “Book Store တစ္ခုအတြက္ Database Table ေတြ ဘယ္လိုေဆာက္ရမလဲ” ဆိုျပီး ေမးထားတဲ႔ ေမးခြန္းတစ္ခု ရွိပါတယ္။ ဒီလိုပဲ ကိုနိုင္ေအာင္ ကလည္း Comment တစ္ခုမွာ “ASP.NET ကေန Database ကို ခ်ိတ္ဆတ္ပံုေလး ေျပာျပေပးပါ” လို႔ ေမးထားပါတယ္။ ဒီေမးခြန္း ၂ ခုကိုလည္း ေျဖရင္းနဲ႔ ကြၽန္ေတာ္ Simple Book Store Program ေလးတစ္ခု တည္ေဆာက္ျပခ်င္ ပါတယ္။ ဒီ Program ေလးမွာ အဓိက အပိုင္း ၂ ပိုင္း ပါ၀င္ပါတယ္။ Book List နဲ႔ Book Entry ေပါ့။

Database Normalization

Normalization လုပ္လို႔ ေကာင္းတဲ႔ အခ်က္ေတြကိုေတာ့ SQL Server Book Online ထဲမွာ ဒီလို ေျပာထားပါတယ္။

Some of the benefits of normalization include the following:

  • Faster sorting and index creation.
  • A larger number of clustered indexes.
  • Narrower and more compact indexes.
  • Fewer indexes per table. This improves the performance of the INSERT, UPDATE, and DELETE statements.
  • Fewer null values and less opportunity for inconsistency. This increases database compactness.

read more…

The Silver is the New Black Theme. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.