search ด้วย textbox แล้วแสดงผลในฐานข้อมูลทันที โ่ดยไม่กดปุ่ม
เขียนcode ในevent textchanged ของtextbox ครับ เวลาเราพิมพ์eventนี้จะทำงานเราก็เอาcode selectข้อมูลมาใส่
อ้างอิงบทความเพิ่มเติม http://www.suwansoft.com
Date :
2014-08-27 00:53:31
By :
sam144444
กรณีใช้ event changed ต้องมีการ กด Tab , Enter เพื่อให้เกิด Event นี้ขึ้นมา
ส่วนในกรณีที่ search ทุกครั้งที่คีย์ปุ้มอักษรใดๆ ให้ใช้ keyup หรือ keypress
วิธีนี้ ต้องคำนึงถึงความเร็ว internet ถ้าช้า ก็ให้ไปคิวรี่แค่ อักษรตัวแรก ส่วนที่เหลือหาจาก result ที่ได้มาอีกที
หรือจะหน่วงเวลารอจังหวะการไม่ได้คีย์ปุ่มไดๆ เกินกว่าช่วงเวลาที่กำหนดค่อยส่งชุดข้อความไปคิวรี่ก็ได้
ถ้าเนทเร็ว ก็ต้องดูว่าเซอร์เวอร์รองรับการคิวรี่ได้มากน้อยขนาดไหน ข้อมูลเยอะมากหรือไม่
การส่งไปคิวรี่ ก็ต้องรอ ให้การส่งรีเควสครั้งแรกกลับมาก่อน เพื่อนำมาค้นหาต่อไปอีกครัั้ง
Date :
2014-08-27 06:26:07
By :
Chaidhanan
ใช่ครับขอโทษบอกผิดสงสัยนอนดึกเลยเบอ
Date :
2014-08-27 08:38:47
By :
sam144444
น่าจะใช้ Leave หรือไม่ ก็ดักจับ Enter ที่ KeyDown
Code (C#)
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)//หรือดักจับ key อื่นก็ได้
{
_SQL = "SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Filed] LIKE '%" + textBox1.text + "%' ";
RunSQL();
}
}
private void textBox1_Leave(object sender, EventArgs e)
{
_SQL = "SELECT Column1,Column2,Column3,... FROM [Table-Name] WHERE [Filed] LIKE '%" + textBox1.text + "%' ";
RunSQL();
}
แบบนี้จะได้ไม่ต้องรันงานตลอดเวลาครับไม่งั้นมันคงจะ search กันจนตายไปข้างถ้าหากมีข้อมูลเยอะๆ
Date :
2014-08-27 11:37:22
By :
lamaka.tor
หาคำว่า ajax autocomplete ครับ มีเยอะเลย
Date :
2014-08-27 13:34:38
By :
Dragons_first
หน่วงเวลาเอาไว้ครับ จะกี่วินาทีก็ว่ากันไป
Web App
http://stackoverflow.com/questions/3028704/optimized-search-using-ajax-and-keypress แจ๋วมากฯแจ๋วมากฯ
Code (JavaScript)
$('#<%=TextBoxXXX.ClientID%>').keyup(function (e) {
clearTimeout($.data(this, 'timer'));
if (e.keyCode == 13)
search(true);
else
$(this).data('timer', setTimeout(search, 1500)); //หน่วยนับเป็น มิลลิวินาที 1500 = 1.5 วินาที
});
function search(force) {
var existingString = $('#<%=TextBoxXXX.ClientID%>').val();
if (!force && existingString.length < 5) return false; //wasn't enter, not > 5 ตัวอักษร
$('#<%=btnPostBack.ClientID%>').triger('click');//จะทำอะไรก็ว่ากันไป
}
Windows App (ตรรกะเดียวกัน)
ประวัติการแก้ไข 2014-08-27 19:59:32
Date :
2014-08-27 19:57:13
By :
หน้าฮี
Load balance : Server 00