|
|
|
(C#.Net) Windows Application - DataGridView Up or Down Button |
|
|
|
|
|
|
|
Code (C#)
private int pos = 0;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == (Keys.Up)) || (keyData == (Keys.Down)))
{
int rowIndex = dg_name.CurrentCell.RowIndex;
if (keyData == (Keys.Up))
{
upDataGridViewRow();
//return true;
}
if (keyData == (Keys.Down))
{
downDataGridViewRow();
//return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
private void upDataGridViewRow()
{
try
{
pos = dg_name.BindingContext[dtSet, "cus"].Position - 1;
if (pos < 0)
return;
else
{
dg_name.BindingContext[dtSet, "cus"].Position -= 1;
dg_name.Rows[rowIndex].Selected = false;
dg_name.Rows[dg_name.BindingContext[dtSet, "cus"].Position].Selected = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void downDataGridViewRow()
{
try
{
pos = dg_name.BindingContext[dtSet, "cus"].Position + 1;
int numRows = dtSet.Tables["cus"].Rows.Count;
if (pos == (numRows))
return;
else
{
dg_name.BindingContext[dtSet, "cus"].Position += 1;
dg_name.Rows[rowIndex].Selected = false;
dg_name.Rows[dg_name.BindingContext[dtSet, "cus"].Position].Selected = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
ทำได้แล้วครับ แต่ว่า...
ถ้าผมไป Events อื่นๆ เช่นกดปุ่ม หรือ คลิกที่ DataGridView เอง
พอกดเลื่อนขึ้นหรือลง ข้อมูลใน TextBox ยังค้างที่เดิมครับ
ตอนเลื่อนขึ้นหรือลง โดยที่ยังไม่ได้ไทำ Events อื่นๆ
หลังจากทำรายการอื่นๆ แล้วกลับมาเลื่อนขึ้นหรือลง ข้อมูลยังค้างที่เดิม
|
|
|
|
|
Date :
2013-07-16 19:50:06 |
By :
seattlesonic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลักการประมาณนี้ครับ
--------Control <==> Binding Source <==> Dataset--------
-----------------------------| |---------------------------------------
-----------------------------| |---------------------------------------
-----------------------------| |---------------------------------------
--------------------Binding Navigator----------------------------
ตัว Binding Source ผูกกับ Dataset โดย ( Property Datasource = Dataset และ Property Datamember = TableName )
และ Control เช่น Textbox กับผูกกับ Binding Source อีกที โดย ( Property DataBinding>Text = Binding Source )
ส่วน Binding Navigator เป็นตัวควบคุม การเลื่อนเรคอร์ดแสดงเรคอร์ดใน Dataset ที่ Binding Source ผูกอยู่
(โดย Property BindingSource = Binding Source)
แค่นี้ไม่ว่าเราจะเลื่อนไปเรคอร์ดไหน Control ที่ผูกกับ Binding Source ก็ตามกันไปครับ
|
ประวัติการแก้ไข 2013-07-16 20:31:23 2013-07-16 20:32:14
|
|
|
|
Date :
2013-07-16 20:29:26 |
By :
01000010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จัดไปครับ
|
|
|
|
|
Date :
2013-07-17 06:19:08 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเอาไปศึกษาดูนะครับ ประกอบกับคำอธิบายความคิดเห็นที่ 3 ของผม
Code (C#)
DataTable dt = new DataTable("Test");
DataColumn dc1 = new DataColumn("TestID");
DataColumn dc2 = new DataColumn("TestName");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
DataRow dr = dt.NewRow();
dr.SetField("TestID", "R1");
dr.SetField("TestName", "RowsName1");
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1.SetField("TestID", "R2");
dr1.SetField("TestName", "RowsName2");
dt.Rows.Add(dr1);
BindingSource BS = new BindingSource();
BS.DataSource = dt;
BindingNavigator BN = new BindingNavigator(BS);
TextBox txtID = new TextBox();
TextBox txtName = new TextBox();
txtID.Location = new Point(110, 50);
txtName.Location = new Point(110, 80);
this.Controls.Add(BN);
this.Controls.Add(txtID);
this.Controls.Add(txtName);
txtID.DataBindings.Add("Text",BS, "TestID");
txtName.DataBindings.Add("Text", BS, "TestName");
หมายเหตุ : สร้างฟอร์ม เปล่า ๆ ขึ้นมา แล้ว Copy Code ไปวางไว้ใน Event Form_Load
|
ประวัติการแก้ไข 2013-07-17 13:40:23 2013-07-17 13:42:27
|
|
|
|
Date :
2013-07-17 13:39:45 |
By :
01000010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้เป็น Master-Detial นะครับ ลองเอาไปไล่โค้ดดูการทำงาน ถ้าเข้าใจแล้วค่อยลากคอนโทรนจากหน้าจอมาวางในฟอร์มแทนก็จะง่ายขึ้นครับ
Code (C#)
DataTable dt = new DataTable("Test");
DataTable dtdt = new DataTable("TestDetial");
DataColumn dc1 = new DataColumn("TestID");
DataColumn dc2 = new DataColumn("TestName");
DataColumn dcdt1 = new DataColumn("DetialID");
DataColumn dcdt2 = new DataColumn("DetialName");
DataColumn dcdt3 = new DataColumn("TestID");
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dtdt.Columns.Add(dcdt1);
dtdt.Columns.Add(dcdt2);
dtdt.Columns.Add(dcdt3);
DataRow dr = dt.NewRow();
dr.SetField("TestID", "R1");
dr.SetField("TestName", "RowsName1");
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1.SetField("TestID", "R2");
dr1.SetField("TestName", "RowsName2");
dt.Rows.Add(dr1);
DataRow drdt1 = dtdt.NewRow();
drdt1.SetField("DetialID", "S1");
drdt1.SetField("DetialName", "Student1");
drdt1.SetField("TestID", "R1");
dtdt.Rows.Add(drdt1);
DataRow drdt2 = dtdt.NewRow();
drdt2.SetField("DetialID", "S2");
drdt2.SetField("DetialName", "Student2");
drdt2.SetField("TestID", "R1");
dtdt.Rows.Add(drdt2);
BindingSource BS = new BindingSource();
BindingSource BSDetial = new BindingSource();
BS.DataSource = dt;
DataSet DS = new DataSet();
DS.Tables.Add(dt);
DS.Tables.Add(dtdt);
DataRelation dtr = new DataRelation("TestRelation", DS.Tables["Test"].Columns["TestID"], DS.Tables["TestDetial"].Columns["TestID"],false);
DS.Relations.Add(dtr);
BSDetial.DataSource = BS;
BSDetial.DataMember = "TestRelation";
BindingNavigator BN = new BindingNavigator(BS);
TextBox txtID = new TextBox();
TextBox txtName = new TextBox();
txtID.Location = new Point(110, 50);
txtName.Location = new Point(110, 80);
DataGridView dgv = new DataGridView();
dgv.DataSource = BSDetial;
dgv.Location = new Point(40, 110);
this.Controls.Add(BN);
this.Controls.Add(txtID);
this.Controls.Add(txtName);
this.Controls.Add(dgv);
txtID.DataBindings.Add("Text",BS, "TestID");
txtName.DataBindings.Add("Text", BS, "TestName");
หมายเหตุ : อันนี้เอาไปยัดใส่ Event Form_Load เหมือนความคิดเห็นด้านบนนะครับ
|
ประวัติการแก้ไข 2013-07-17 15:28:33
|
|
|
|
Date :
2013-07-17 15:28:13 |
By :
01000010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอขอบคุณเป็นอย่างสูง มา ณ ที่นี้ ด้วยนะครับ
|
|
|
|
|
Date :
2013-07-17 20:53:50 |
By :
seattlesonic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมสอบถามอีกนิดหน่อยครับ
มีวิธีบล๊อคปุ่ม Tab บนคีย์บอร์ดมั้ยครับ
เพื่อไม่ให้ DataGridView เลื่อนตำแหน่งได้
(เฉพาะ DataGridView นะครับ)
|
|
|
|
|
Date :
2013-07-18 13:16:33 |
By :
seattlesonic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|