View Full Version : کار با رویدادهای کلید ها در دیتاگرید ویو
vbsalam
جمعه 16 دی 1390, 17:29 عصر
سلام
میخوام وقتی کار بر داره گرید و پر میکنه
فرض کنید تو خونه ی اوله گرید هستش وقتی داده اش رو وارد کرد اینتر که میزنه بره خونه ی ستون چهارم
و اینتر بعدی رو که زد بره خونه اول سطر بعدی
چیکار باید بکنم به نظرتون؟
massar
جمعه 16 دی 1390, 20:05 عصر
سلام
یه راه اینه که با استفاده از دو ایونت CellEndEdit و SelectionChanged یه چیزی شبیه این بنویسید:
private bool FirstColumnEdited = false;//agar selule aval enter khord in moteghayer true mishe
private bool ForthColumnEdited = false;//agar selule 4harom enter khord in moteghayer true mishe
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
FirstColumnEdited = e.ColumnIndex == 2;
ForthColumnEdited = e.ColumnIndex == 3;
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if(FirstColumnEdited)
dataGridView1.CurrentCell = dataGridView1[3, dataGridView1.CurrentCell.RowIndex - 1];
else if(ForthColumnEdited)
dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.CurrentCell.RowIndex];
FirstColumnEdited = ForthColumnEdited = false;
}
vbsalam
شنبه 17 دی 1390, 01:17 صبح
سلام
یه راه اینه که با استفاده از دو ایونت CellEndEdit و SelectionChanged یه چیزی شبیه این بنویسید:
private bool FirstColumnEdited = false;//agar selule aval enter khord in moteghayer true mishe
private bool ForthColumnEdited = false;//agar selule 4harom enter khord in moteghayer true mishe
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
FirstColumnEdited = e.ColumnIndex == 2;
ForthColumnEdited = e.ColumnIndex == 3;
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if(FirstColumnEdited)
dataGridView1.CurrentCell = dataGridView1[3, dataGridView1.CurrentCell.RowIndex - 1];
else if(ForthColumnEdited)
dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.CurrentCell.RowIndex];
FirstColumnEdited = ForthColumnEdited = false;
}
جواب نداااااااااااااااااااااد!! !:(
massar
شنبه 17 دی 1390, 20:08 عصر
اگه بیشتر دقت کنید جواب میده، بهرحال من یه سمپل کد ضمیمه کردم امیدوارم کمک کنه ^_^
vbsalam
یک شنبه 18 دی 1390, 12:58 عصر
اگه بیشتر دقت کنید جواب میده، بهرحال من یه سمپل کد ضمیمه کردم امیدوارم کمک کنه ^_^
داداش خب تو این سمپلم که دادی اینتر و میزنم میره سطر بعد:گریه:نمیره ستون 4:گریه:
باور کنید نمیره
solaleh
یک شنبه 18 دی 1390, 15:30 عصر
من برای این کار یه user control ساختم و مشکل شما رو اینطوری توی DataGridView، هندل کردم.به صورت زیر:
class CustomDataGridView : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
return this.ProcessRightKey(keyData);
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
return this.ProcessRightKey(e.KeyData);
}
return base.ProcessDataGridViewKey(e);
}
}
حالا اگر میخواین به ستون 4 باید تغییراتتون رو روی این اعمال کنین...
amir_rtf
یک شنبه 18 دی 1390, 15:35 عصر
دوست عزيز اين دستور استفاده كن
if (dgwSanads.CurrentCell == dgwSanads[1, raj])
{
//برو به سلول كد
dgwSanads.CurrentCell = dgwSanads[4, raj];
}
vbsalam
یک شنبه 18 دی 1390, 16:06 عصر
دوست عزيز اين دستور استفاده كن
if (dgwSanads.CurrentCell == dgwSanads[1, raj])
{
//برو به سلول كد
dgwSanads.CurrentCell = dgwSanads[4, raj];
}
این دتون منطقی نیست!
یکی اینکه زدن کلید اینتر درش درج نشده اصلا!
این Rajچیه؟
بعدشم اینکه اصلا تو چه رویدادی نوشته بشه؟
vbsalam
یک شنبه 18 دی 1390, 16:07 عصر
من برای این کار یه user control ساختم و مشکل شما رو اینطوری توی DataGridView، هندل کردم.به صورت زیر:
class CustomDataGridView : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
return this.ProcessRightKey(keyData);
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
return this.ProcessRightKey(e.KeyData);
}
return base.ProcessDataGridViewKey(e);
}
}
حالا اگر میخواین به ستون 4 باید تغییراتتون رو روی این اعمال کنین...
نمیخوام از یوزر کنترل استفاده کنم!
در غیر این صورت اگه تو گرید خودم این کدارو بنویسم جواب میده؟؟؟؟؟
amir_rtf
یک شنبه 18 دی 1390, 16:37 عصر
rajشمارهrowجاريه (currentrow)و تو رويداد KeyDownبنويسش
if(e.keydata==keys.enter)
massar
یک شنبه 18 دی 1390, 17:58 عصر
داداش خب تو این سمپلم که دادی اینتر و میزنم میره سطر بعد:گریه:نمیره ستون 4:گریه:
باور کنید نمیره
شما گفته بودی وقتی داده اش رو کاربر وارد کرد، بهرحال اینم کد ادیت شده.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.