PDA

View Full Version : کار با رویدادهای کلید ها در دیتاگرید ویو



vbsalam
جمعه 16 دی 1390, 16:29 عصر
سلام
میخوام وقتی کار بر داره گرید و پر میکنه
فرض کنید تو خونه ی اوله گرید هستش وقتی داده اش رو وارد کرد اینتر که میزنه بره خونه ی ستون چهارم
و اینتر بعدی رو که زد بره خونه اول سطر بعدی
چیکار باید بکنم به نظرتون؟

massar
جمعه 16 دی 1390, 19: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, 00: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, 19:08 عصر
اگه بیشتر دقت کنید جواب میده، بهرحال من یه سمپل کد ضمیمه کردم امیدوارم کمک کنه ^_^

vbsalam
یک شنبه 18 دی 1390, 11:58 صبح
اگه بیشتر دقت کنید جواب میده، بهرحال من یه سمپل کد ضمیمه کردم امیدوارم کمک کنه ^_^

داداش خب تو این سمپلم که دادی اینتر و میزنم میره سطر بعد:گریه:نمیره ستون 4:گریه:
باور کنید نمیره

solaleh
یک شنبه 18 دی 1390, 14: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, 14:35 عصر
دوست عزيز اين دستور استفاده كن
if (dgwSanads.CurrentCell == dgwSanads[1, raj])
{
//برو به سلول كد
dgwSanads.CurrentCell = dgwSanads[4, raj];
}

vbsalam
یک شنبه 18 دی 1390, 15:06 عصر
دوست عزيز اين دستور استفاده كن
if (dgwSanads.CurrentCell == dgwSanads[1, raj])
{
//برو به سلول كد
dgwSanads.CurrentCell = dgwSanads[4, raj];
}

این دتون منطقی نیست!
یکی اینکه زدن کلید اینتر درش درج نشده اصلا!
این Rajچیه؟
بعدشم اینکه اصلا تو چه رویدادی نوشته بشه؟

vbsalam
یک شنبه 18 دی 1390, 15: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, 15:37 عصر
rajشمارهrowجاريه (currentrow)و تو رويداد KeyDownبنويسش
if(e.keydata==keys.enter)

massar
یک شنبه 18 دی 1390, 16:58 عصر
داداش خب تو این سمپلم که دادی اینتر و میزنم میره سطر بعد:گریه:نمیره ستون 4:گریه:
باور کنید نمیره

شما گفته بودی وقتی داده اش رو کاربر وارد کرد، بهرحال اینم کد ادیت شده.