PDA

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



sara_t
چهارشنبه 12 بهمن 1390, 15:54 عصر
سلام دوستان

من یه گرید درام که با اینتر بین سل ها حرکت میکنم.
مثلا در سل شماره 3 یه پنل باز میشه که مقدار ی رو وارد میکنم و در سلولهای شماره 8 قرار میده، بعد سلول شماره 8 سلکت میشه اما نه اینتر فعال هست و نه کلیدهای جهتدار. و حتما باید یه بار بر روی سلول 8 کلیک کنم تا کلیدهای جهت دار فعال بشن. چطور میتونم فوکوس رو بر روی سلول 8 تنظیم کنم (با توجه به اینکه خود سلول 8 ابی رنگه و فعال هست)

ممنون

ali_habibi1384
چهارشنبه 12 بهمن 1390, 16:20 عصر
سلام دوستان

من یه گرید درام که با اینتر بین سل ها حرکت میکنم.
مثلا در سل شماره 3 یه پنل باز میشه که مقدار ی رو وارد میکنم و در سلولهای شماره 8 قرار میده، بعد سلول شماره 8 سلکت میشه اما نه اینتر فعال هست و نه کلیدهای جهتدار. و حتما باید یه بار بر روی سلول 8 کلیک کنم تا کلیدهای جهت دار فعال بشن. چطور میتونم فوکوس رو بر روی سلول 8 تنظیم کنم (با توجه به اینکه خود سلول 8 ابی رنگه و فعال هست)

ممنون
سوال بسيار تكراري(روزي 1 بار پرسيده ميشه). لطفا جستجو كنيد .
پس از رويداد Begin Edit در سلول تا زمانيكه رويداد EndEdit انجام نشود نميتوانيد رويداد KeyDown داخل سلول يا Change يا هر چيز ديگه رو فراخوني كني.

sara_t
پنج شنبه 13 بهمن 1390, 06:34 صبح
من سرچ کرده بودم، اما به توصیه شما مجددا سرچ کردم.
ولی مطلب موردنظرمو پیدا نکردم، من از متد زیر استفاده میکنم اما تاثیری نداره.
datagridview.endedit(); این کد رو در اخر قسمتی اضافه میکنم که سلول پرشده.
ایا باید کار دیگه ای هم انجام بدم؟

ali_habibi1384
پنج شنبه 13 بهمن 1390, 10:38 صبح
من سرچ کرده بودم، اما به توصیه شما مجددا سرچ کردم.
ولی مطلب موردنظرمو پیدا نکردم، من از متد زیر استفاده میکنم اما تاثیری نداره.
datagridview.endedit(); این کد رو در اخر قسمتی اضافه میکنم که سلول پرشده.
ایا باید کار دیگه ای هم انجام بدم؟
فراخواني رويداد EndEdit يك سلول چه سودي بايد براي شما داشته باشه؟
چه توقعي از اين قطعه كد داشتيد؟
سورستونو قرار بديد. و مشكلتونو واضحتر بيان كنيد

sara_t
پنج شنبه 13 بهمن 1390, 15:30 عصر
private void dataGridView_KeyDown(object sender, KeyEventArgs e)
{
int rowIndex2;
int currentColumn;
if (dataGridView.CurrentCell == null)
{
currentColumn = 3;
insertRow = 0;
}
else
{
currentColumn = dataGridView.CurrentCell.ColumnIndex;
insertRow = dataGridView.CurrentCell.RowIndex;
}
switch (e.KeyCode)
{
case Keys.Enter:
switch (currentColumn)
{
case 3:
//تعداد
if (dataGridView.CurrentCell != null)
if (dataGridView.CurrentCell.Value.ToString() != "")
{
text1.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[3].Value.ToString();
text2.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[4].Value.ToString();
text3.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[5].Value.ToString();

rowIndex2 = dataGridView.CurrentCell.RowIndex;
dataGridView.Rows[rowIndex2].Cells[4].Selected = true;
button1_Click(this, e);
dataGridView.EndEdit();
}
break;

case 4:
//فی
if (dataGridView.CurrentCell != null)
if (dataGridView.CurrentCell.Value.ToString() != "")
{

text1.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[3].Value.ToString();
text2.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[4].Value.ToString();
text3.Text = dataGridView.Rows[dataGridView.CurrentCell.RowIndex].Cells[5].Value.ToString();
button1_Click(this, e);
}
break;

ممنون از راهنماییتون ببخشید من بسیار مبتدی هستم.

من از یه خاصیت key_down استفاده کردم، و مقادیر 3 تا خانه دیتاگرید رو در 2تا تکست باکس وارد میکنم و توسط باتن1 اونا رو جمع میکنم و مقدار رو در تکست3 قرار میدم.
در دیتاگرید خاصیت editmode=onenter قرار دادم و سعی کردم با خاصیت select به خونه بعدی برم یعنی در case 3 از ستون سوم به ستون 4.
اما در ستون 3 که اینتر میزنم به سلول پایینی میره.

بازم ممنون که وقت میذارید

ali_habibi1384
پنج شنبه 13 بهمن 1390, 17:16 عصر
سورستون رو زيپ كنيد و الصاق كنيد (آپلود). اينجوري چيزي معلوم نيست.

meisam3322
پنج شنبه 13 بهمن 1390, 17:42 عصر
دوست عزیز ، sara_t ، برای گذاشتن کد یا اونو zip کنین و ضمیمه کنین یا اگر کد میزاری ، زمان پاسخ گویی کد ها رو داخل تگ code بزارین. این # علامت. خیلی بهم ریخته است و من یکی که اصلا نمیتونم به اون کدها نگاه کنم :گیج:

sara_t
پنج شنبه 13 بهمن 1390, 21:02 عصر
private void dataGridView2_KeyDown(object sender, KeyEventArgs e)
{
int rowIndex2;
int currentColumn;
if (dataGridView2.CurrentCell == null)
{
currentColumn = 3;
nsertRow = 0;
}
else{

currentColumn = dataGridView2.CurrentCell.ColumnIndex;
insertRow = dataGridView2.CurrentCell.RowIndex;
}
switch (e.KeyCode)
{
case Keys.Enter:
switch (currentColumn)
{

case 3:
if (dataGridView2.CurrentCell != null)
if (dataGridView2.CurrentCell.Value.ToString() != "")
{
text1.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[3].Value.ToString();
text2.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[4].Value.ToString();
text3.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[5].Value.ToString();

rowIndex2 = dataGridView2.CurrentCell.RowIndex;
dataGridView2.Rows[rowIndex2].Cells[4].Selected = true;
button1_Click(this, e);
dataGridView2.EndEdit();
}
break;

case 4:
if (dataGridView2.CurrentCell != null)
if (dataGridView2.CurrentCell.Value.ToString() != "")
{

text1.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[3].Value.ToString();
text2.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[4].Value.ToString();
text3.Text = dataGridView2.Rows[dgKharidList.CurrentCell.RowIndex].Cells[5].Value.ToString();
button1_Click(this, e);
}
break;

case 5:
if (dataGridView2.CurrentCell != null)
if (dataGridView2.CurrentCell.Value.ToString() != "")
{

text1.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[3].Value.ToString();
text2.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[4].Value.ToString();
text3.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[5].Value.ToString();
button1_Click(this, e);
}
break;
}
break;

}

sara_t
پنج شنبه 13 بهمن 1390, 21:10 عصر
چون کد متعلق به خودم نیست نمیتونم سورس رو کامل قرار بدم (از این بابت عذر میخام)

فقط مشکل من تو این کد فوکوس هر سلول بعد از زدن اینتر هست. یعنی میخام یه سری کد بعد از هر case قرار بدم که فوکوس روی سلول بعدی قرار بگیره.
اون 3 تا خطی هم که کامل قرار نگرفته رو اینجا مینویسم:

text1.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[3].Value.ToString();

text2.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[4].Value.ToString();

text3.Text = dataGridView2.Rows[dataGridView2.CurrentCell.RowIndex].Cells[5].Value.ToString();

sara_t
جمعه 14 بهمن 1390, 15:45 عصر
دوستان لطفا جواب بدید.

چطور میتونم دوباره رویداد keydown رو فعال کنم؟
میشه لطفا با کد توضیح بدید؟