PDA

View Full Version : ماندن فوکوس بر روی سطر جاری datagridview بعد از رفرش یا آپدیت



jafarpalideh
جمعه 24 شهریور 1396, 09:31 صبح
سلام .
چطور میتونم بعد از اینکه دیتاگریدیو رو رفرش کردم یا بعد از آپدیت فوکوس رو رویه سطر جاری نگه دارم .
چون در حال حاضر با هر بار آپدیت کردن سطر جاری ، فوکوس به رکورد اول منتقل میشه .
با سپاس

ژیار رحیمی
جمعه 24 شهریور 1396, 10:08 صبح
سلام
میتونی از یک متغییر کمکی جهت نگهداشتن ایندکس سطر انتخابی استفاده کنی و بعد از آپدیت مجدد سطر مورد نظر را Select کنی

int SelectedRow;


private void DataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (e.StateChanged != DataGridViewElementStates.Selected) return;
SelectedRow= dataGridView1.CurrentRow.Index;
}


private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
SelectedRow= dataGridView1.CurrentRow.Index;
}


//برای انتخاب مجدد سطر
dataGridView1.Rows[SelectedRow].Selected = true;

jafarpalideh
جمعه 24 شهریور 1396, 10:30 صبح
سلام
میتونی از یک متغییر کمکی جهت نگهداشتن ایندکس سطر انتخابی استفاده کنی و بعد از آپدیت مجدد سطر مورد نظر را Select کنی

int SelectedRow;


private void DataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (e.StateChanged != DataGridViewElementStates.Selected) return;
SelectedRow= dataGridView1.CurrentRow.Index;
}


private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
SelectedRow= dataGridView1.CurrentRow.Index;
}


//برای انتخاب مجدد سطر
dataGridView1.Rows[SelectedRow].Selected = true;




متاسفانه این کد جواب نداد و دوباره میره سطر اول

jafarpalideh
جمعه 24 شهریور 1396, 10:37 صبح
بعد از اینکه من آپدیت رو انجام میدم یکبار متود آپدیتم رو صدا میزنم و اونجا SelectedRow من صفر میشه . بخاطر همین کد شما جواب نمیده .

Mahmoud.Afrad
جمعه 24 شهریور 1396, 22:13 عصر
دو راه دارید،
یکی همین کاری که کردید و دوباره اطلاعات را دریافت کنید اما قبل از دریافت مجدد بایست اندیس سطری که آپدیت میشه را بدست بیارید و بعد از دریافت اطلاعات و نمایش در دیتاگرید CurrentRow را به همان اندیس ست کنید.
راه دیگر هم این هست که بعد از اینکه عمل آپدیت را انجام دادید، سطر مورد نظر از منبع داده را با اطلاعات مورد نظر به روزرسانی کنید. در این حالت دیگه نیاز به دریافت مجدد اطلاعات از دیتابیس نیست.

danialafshari
شنبه 25 شهریور 1396, 02:22 صبح
با سلام
ابتدا خصوصیات دیتاگرید را به شکل زیر تغییر دهید:


MultiSelect = false
SelectionMode = FullRowSelect


سپس کد زیر را را در باتن ثبت بنویسید

private void btnUpdate_Click(object sender, EventArgs e)
{
int rowSelect = dataGridView1.CurrentRow.Index;


//Update code is here
//some code for update

//refresh
Form1_Load(null, null);


//after update
dataGridView1[0, rowSelect].Selected = true;
}

موفق باشید

jafarpalideh
شنبه 25 شهریور 1396, 07:51 صبح
با سلام
ابتدا خصوصیات دیتاگرید را به شکل زیر تغییر دهید:


MultiSelect = false
SelectionMode = FullRowSelect


سپس کد زیر را را در باتن ثبت بنویسید

private void btnUpdate_Click(object sender, EventArgs e)
{
int rowSelect = dataGridView1.CurrentRow.Index;


//Update code is here
//some code for update

//refresh
Form1_Load(null, null);


//after update
dataGridView1[0, rowSelect].Selected = true;
}

موفق باشید



سپاس فراوان آقای افشاری .

کد شما جواب داد .

sg.programmer
شنبه 22 مهر 1396, 18:07 عصر
با سلام
ابتدا خصوصیات دیتاگرید را به شکل زیر تغییر دهید:


MultiSelect = false
SelectionMode = FullRowSelect


سپس کد زیر را را در باتن ثبت بنویسید

private void btnUpdate_Click(object sender, EventArgs e)
{
int rowSelect = dataGridView1.CurrentRow.Index;


//Update code is here
//some code for update

//refresh
Form1_Load(null, null);


//after update
dataGridView1[0, rowSelect].Selected = true;
}

موفق باشید


سلام این مورد خیلی هم خوب کار میکنه در صورتی که کاربر روی ستون کلیک نکنه و ترتیب سطرها را تغییر نده . ولی
حالا اگه کاربر روی گرید کلیک کنه و ترتیب رکورد ها جابجا شد بعد از آپدیت شدن دیتا و لود مجدد دیتا ها چون سورت دیتا تغییر میکنه ایندکس سطر انتخابی چون یک بار کلیک کرده تغییر میکنه و دیگه اون سطر انتخابی کاربر نیست برای حل این مورد دیگه خاصیت CurrentRow جوابگو نیست .
برای حل این مورد چه راه حلی موجود هست؟

ژیار رحیمی
یک شنبه 23 مهر 1396, 02:37 صبح
سلام
در مورد این مشکل بهتره بجای CurrentRow دیتاگرید Id رکورد (انتخاب شده)رو نگه داری بعد از ویرایش یه جسنجو در دیتاگرید انجام بدی و سطری که Id رکورد ان برابر مقدار نگداری شده بود را در DataGrid سلکت کنی

jafarpalideh
چهارشنبه 03 آبان 1396, 13:35 عصر
دوستان من مجدد این پست رو آپ میکنم چون یه مشکلی پیش اومده واسم .
من دقیقا بعد از اینکه آپدیت رو انجام دادم دوباره میام و کوئری که اطلاعات رو تویه گرید نشون میده رو فراخوانی میکنم . تا الان باهاش مشکلی نداشتم ولی از موقعی که اومدم و بر اساس یه ستون خاص Order By رو انجام دادم ، سطر مورد نظر انتخاب میشه ولی دوباره میاد و اول دیتاگرید رو نشون میشه .!!!!! (یعنی باس اسکرول کنم تا سطر انتخابی رو ببینم)
چطور میتونم فوکوس دیتاگرید رو هم رویه اون سطر انتخابی بندازم .

jafarpalideh
چهارشنبه 03 آبان 1396, 14:41 عصر
مشکل رو از طریق کد پایین حل کردم . ولی هنوز یه موردی داره : اونم اینه که اگه رویه یه ستونی جهت مرتب سازی کلیک کرده باشی بعد از آپدیت فوکوس رویه سطر جاری نمیمونه. این مورد رو چه باید کرد ؟





int saveRow = 0;
if (dataGridView1.Rows.Count > 0)
saveRow = dataGridView1.FirstDisplayedCell.RowIndex;


if (saveRow != 0 && saveRow < dataGridView1.Rows.Count)
dataGridView1.FirstDisplayedScrollingRowIndex = saveRow;

sg.programmer
چهارشنبه 03 آبان 1396, 15:15 عصر
اینو من هم دنبالشم

اگه کسی نمونه ای داره قرار بده

patrick5053
پنج شنبه 14 شهریور 1398, 13:45 عصر
private void btnUpdate_Click(object sender, EventArgs e) {
int rowSelect = dataGridView1.CurrentRow.Index;


//Update code is here
//some code for update

//refresh
Form1_Load(null, null);


//after update
dataGridView1.CurrentCell = dataGridView1.Rows[rowSelect].Cells[1];
}

من این کد رو اینطوری اصلاح کردم تست کنید جواب میده موفق باشید