ข้อคำแนะเกี่ยว DataGridView หน่อยครับ เวลาค้นหาให้ DataGrid refresh ตามตัวอักษรที่เราค้นหายังไงครับ ขอคำแนะนำหน่อยครับ
เขียนโค้ดที่ Select ข้อมูล ไว้ที่เหตุการณ์(Event) ที่ข้อมูลมีการเปลี่ยนแปลง Text_Change ใบ้ให้ประมาณนี้ครับ
ประวัติการแก้ไข 2013-07-01 15:24:27
Date :
2013-07-01 15:23:32
By :
01000010
ขอบคุณครับเดียวจะลองทำดู....ถ้าใบ้เกี่ยวกับหลักการทำงานของมันอีกนิสก็คงดีนะครับพี่
Date :
2013-07-01 21:07:51
By :
ธีระวุฒิ
ที่ว่า Text_Change (Event) ของ TextBox ใช้ไหมครับ..ที่textbox ผมทำให้มันโชร์ ขึ้นมาได้ครับ สมมุติผม พิม A ก็จะมี ข้อมูลคำที่ขึ้นต้นด้วย A ขึ้นมาครับ แต่ว่า ผมอยากให้ ข้อมูลที่อยู่ใน DataGrid มัน refresh ข้อมูลตามด้วยเวลาเราพิม A ข้อมูลที่มีตัว A ก็ให้ dataGrid มันเอา เฉพาะ ชื่อที่มีตัว A ขึ้นมายังงี้ อ่ะครับ จะใช้ (Event) ตัวไหนหรือยังไงครับ....
Date :
2013-07-01 21:18:44
By :
ธีระวุฒิ
ข้อมูลที่ว่านี่ใช้คำสั่ง Select มาจากฐานข้อมูลหรือปล่าวครับ ??
Date :
2013-07-02 07:58:44
By :
01000010
ใช่ครับ select มาจาก ฐานข้อมูล SQL Server 2008 ครับ
Date :
2013-07-02 10:43:55
By :
ธีระวุฒิ
มันจะมีสองวิธีเท่าที่ผมรู้นะครับ
1.Select ข้อมูลจากฐานข้อมูล มาใส่ Dataset แล้วค้นหาจาก Dataset (วิธีนี้ไม่แน่ใจ)
2.Select จากฐานข้อมูลตรงๆ ทุกๆครั้งที่มีการเกิดเหตุการณ์ (Key_Change) ก็จะให้ทำการ Execute ตลอด (แต่จะช้า)
Date :
2013-07-02 12:41:14
By :
01000010
ตัวที่ สอง พอจะมีโค้ด ที่เป็นตัวอย่าง สักนิสไหมครับ..
ผม งุมมืดไปแล้วมัน ไม่ได้ไรเลยครับ
Date :
2013-07-02 14:55:50
By :
ธีระวุฒิ
ไม่มีโค้ดให้ครับ เพราะผมก็เขียนไม่ถูก
มีเป็นแนวๆนะครับ เช่น ใน Datagrid.Datasource = Dataset
ใน Dataset เราก็ต้อง Fill ข้อมูลมาใส่ก่อนใช่ไหมครับ DataAdapter.Fill(Dataset,"Table")
ไอตอน Fill นี้สำคัญ ข้อมูลจากฐานข้อมูลจะดึงมาใส่ใน Dataset แล้ว Datagrid ก็นำมาอ้างอิงอีกที
ไอตอน Fill เราก็เอาไปใส่ขณะเกิดเหตุการณ์ textbox ตัวอักษรมีการเปลี่ยนแปลง ให้มัน Fill ทุกครั้งที่พิมพ์
ประวัติการแก้ไข 2013-07-02 16:36:31
Date :
2013-07-02 16:35:27
By :
01000010
ผมจะลองงุมๆดูอีกครังครั้งครับ...แต่ยังไงก็จะทำให้ได้นั้นแหละครับ..ขอบคุณมากๆครับที่ช่วยอธิบายหลักการทำงาน ขอบคุณครับ
Date :
2013-07-02 19:28:36
By :
ธีระวุฒิ
บรรทัดที่นำ dataset ไปอ้างอิง ลองใช้อย่างนี้ได้ไหมครับ (dgvEmployees.DataSource = ds.table("FullName")
ต่อจากอ้างอิงแล้วก็ใส่ dgvEmployees.Refresh()
ปล.เขียนสด ไม่แน่ใจนะครับว่าใช่หรือปล่าว หรือเขียนถูกหรือปล่าวแต่เอาไปลองก่อน
Date :
2013-07-04 08:47:27
By :
01000010
เขียนยังงี้ มันจะ Refresh DataGrid เลยอ่ะครับ ไม่มีไรเลย
Code (C#)
private void CM()
{
string sql = "Select FullName from Employees";
comm = new SqlCommand(sql, conn);
da = new SqlDataAdapter(comm);
ds = new DataSet();
dgvEmployees.DataSource = ds.Tables["FullName"];
dgvEmployees.Refresh();
}
หน้าตาตอนแรกยังไม่มีอะไร เปลี่ยนไป
แต่พอผมจะพิมหา มักก็ ส่งให้ DataGrid Refresh ข้อมูลข้างในทำให้ หายหมดโดยที่ไม่โชร์ไรเลย แสดงว่า เกือบได้ ผลแต่ ไม่ได้ผล
เหมือนจะ ขาดโค้ดอะไรสักตัว..ที่ต้องทำให้มันแสดง ตามไปด้วย
Date :
2013-07-04 15:39:49
By :
ธีระวุฒิ
-*- ไม่ Fill ข้อมูลเข้าไปใน Dataset ก่อนละครับบบบบบ
da.Fill(ds, "FullName");
บรรทัดนี้ที่คุณเขียนหายไปไหน
ประวัติการแก้ไข 2013-07-04 15:45:19 2013-07-04 15:45:22
Date :
2013-07-04 15:44:26
By :
01000010
อ่อ...ผมลืม...ขอโทษที่ครับ
ตอนนี้ ผมค้นหาตามชื่อตาม ID ตาม ชื่อ ได้แล้วครับ
เหลือแค่ให้มัน run ตาม ตัวอักษรที่เราพิมพ์ ที่ผมยังทำไม่ได้
Date :
2013-07-04 19:48:06
By :
ธีระวุฒิ
เวลา Select อะนะ คำสั่งหลังที่เขียน Where ก็ใช้Operator Like และใช้ % ครอบคำที่ต้องการค้นหาไว้ เช่น Where [Field] Like '%Bat%'
คำที่ค้นหาได้ อาจจะได้คำว่า Batman , Battle , Batty , Combat เป็นต้น
ประวัติการแก้ไข 2013-07-05 08:52:45
Date :
2013-07-05 08:52:10
By :
01000010
ขอบคุณครับพี่
ผมว่ามีอีกทาง ผมว่าจะทำ
textbox autocomplete in datagridview เหมือนที่ผมทำกับ textBox อ่ะครับ แต่ว่าเขียนแล้วมันยังบ่ออกเลยครับ ไม่มีอะไรขึ้นเลย
พี่ช่วยดูโค้ดให้หน่อยว่า ผมจะต้องไปกำหนดตัวไหน อีก ทำไหมมันไม่ ขึ้นอะไรเลย ไม่ error
Code (C#)
private void dgvCustomer_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dgvCustomer.CurrentCell.ColumnIndex == 1)
{
SqlConnection conn = new SqlConnection();
comm = new SqlCommand();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
AutoCompleteStringCollection acBusIDsorce = new AutoCompleteStringCollection();
comm.CommandText = " Select Name From Organization";
conn.Open();
dr = comm.ExecuteReader();
if (dr.HasRows == true)
{
while (dr.Read()) acBusIDsorce.Add(dr["Name"].ToString());
}
else
{
MessageBox.Show("data Not found");
}
dr.Close();
// TextBox textSearchByName = e.Control as TextBox;
if (textSearchByName != null)
{
textSearchByName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textSearchByName.AutoCompleteCustomSource = acBusIDsorce;
textSearchByName.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
}
Date :
2013-07-05 12:11:30
By :
ธีระวุฒิ
ครับผมจะไปศึกษาให้ละเอียดเลยครับ...ผมมือใหม่ครับกำลัง สงใสนั้นสงใสนี้ ลองทำนั้นทำนี้ ในสิ่งที่ตอนเองไม่รู้....ก็อย่างว่าละครับผมยังไม่รู้จริง...
ขอบคุณที่ให้คำแนะนำเสมอมาครับ... ขอบคุณครับ
Date :
2013-07-05 15:01:05
By :
ธีระวุฒิ
การอยากรู้อยากเห็น และขี้สงสัย ขี้ซักถามเป็นสิ่งที่ดี ในมุมมองของผมนะครับ ถึงใครจะมองเรายังไง แต่สุดท้ายคนที่ได้ความรู้คือตัวเราครับ
ที่ผมแนะนำให้ไปศึกษาตรงนั้นก่อนเพราะดูจากการเขียนโค้ดของคุณ ธีระวุฒิ ยังติดตรงนั้น ตรงนี้ จุดที่เป็นพื้นฐานอยู่ ซึ่งนั้นเป็นสิ่งไม่ดีเลย
ผมจึงแนะนำให้ไปอ่าน/ฝึกพื้นฐานให้แน่นๆก่อนครับ แล้วเราจะเขียนโค้ดอะไรก็ย่อม สะอาด สวยงาม แน่น กระชับ และต่อยอดได้ครับ
Date :
2013-07-05 16:05:48
By :
01000010
ผมก็จะพยายามทำให้ดีกว่านี้ครับ...ขอบคุณที่ให้คำแนะนำ มวยอ่อน อย่างผมครับ ขอบคุณครับ
ตอนนี้ ผมก็ได้คำตอบในส่วนนี้แล้วครับ...
แค่ไม่กี่บรรทัด....แต่ก๊ดูเหมือนมันจะยากสำหรับผม..เพราะไม่เคยเลยทำ
Code (C#)
private void showdata(string txtdata)
{
string sql = "select * from Organization where Name like '%'+@Name+'%'";
SqlCommand comm = new SqlCommand(sql, conn);
comm.Parameters.AddWithValue("@Name", txtdata);
da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
da.Fill(ds);
dgvCustomer.DataSource = ds.Tables[0];
}
//---------------------------------------------------------------
private void textSearchByName_TextChanged(object sender, EventArgs e)
{
showdata(textSearchByName.Text.Trim());
}
Date :
2013-07-06 11:41:40
By :
ธีระวุฒิ
พี่ครับผมมี ข้อ ส่งใส อีกแล้วครับ...
ถ้าผม join ยังงี้ แล้ว
Code (SQL)
select Employees.EmployeeID,antecedent,Employees.FullName,Position,Sex, Employees.Address,Employees.Phone,Birthdate,WorkStart,Salary,Picture,Organization.Name
From Employees inner join Organization
on Employees.OID=Organization.OID
ผมอยากจะเอา มาประยุกให้เข้ากับฟังชัน like ยังไงครับ เหมือนกับข้างล่าง อ่ะครับ
มันจะเป็น โค้ด เพื่อใช้ในการค้นหา ผมอยาก เปลี่ยน จาก * ไม่ให้มันโชร์ข้อมูลทั้งหมดเพราะอาจจะมีบ้าง Fill ที่เราต้องการใหมันโชร์ อ่ะครับ จะกำหนดตามที่เราต้องการให้โชร์เท่านั้นครับ เหมือนกับที่ผม join ข้างบนอ่ะครับ ช่วยแนะนำหน่อยนะครับ.. ขอบคุณล่วงหน้าครับ...
select * from Employees where FullName like '%'+@FullName+'%'
Date :
2013-07-10 00:02:07
By :
ธีระวุฒิ
ต่อไปเลยครับ
Code (SQL)
select Employees.EmployeeID,antecedent,Employees.FullName,Position,Sex, Employees.Address,Employees.Phone,Birthdate,WorkStart,Salary,Picture,Organization.Name
From Employees inner join Organization
on Employees.OID=Organization.OID
where Employees.FullName like '%FullName%'
Date :
2013-07-10 08:17:57
By :
01000010
ขอบคุณมาก...ๆ คร๊าฟพี่.....แจ๋วไปเลยครับ..
Date :
2013-07-10 11:49:40
By :
ธีระวุฒิ
Load balance : Server 00