سلام .
چطور میتونم بعد از اینکه دیتاگریدیو رو رفرش کردم یا بعد از آپدیت فوکوس رو رویه سطر جاری نگه دارم .
چون در حال حاضر با هر بار آپدیت کردن سطر جاری ، فوکوس به رکورد اول منتقل میشه .
با سپاس
سلام .
چطور میتونم بعد از اینکه دیتاگریدیو رو رفرش کردم یا بعد از آپدیت فوکوس رو رویه سطر جاری نگه دارم .
چون در حال حاضر با هر بار آپدیت کردن سطر جاری ، فوکوس به رکورد اول منتقل میشه .
با سپاس
سلام
میتونی از یک متغییر کمکی جهت نگهداشتن ایندکس سطر انتخابی استفاده کنی و بعد از آپدیت مجدد سطر مورد نظر را 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;
First,solve the problem then write the code
بعد از اینکه من آپدیت رو انجام میدم یکبار متود آپدیتم رو صدا میزنم و اونجا SelectedRow من صفر میشه . بخاطر همین کد شما جواب نمیده .
دو راه دارید،
یکی همین کاری که کردید و دوباره اطلاعات را دریافت کنید اما قبل از دریافت مجدد بایست اندیس سطری که آپدیت میشه را بدست بیارید و بعد از دریافت اطلاعات و نمایش در دیتاگرید CurrentRow را به همان اندیس ست کنید.
راه دیگر هم این هست که بعد از اینکه عمل آپدیت را انجام دادید، سطر مورد نظر از منبع داده را با اطلاعات مورد نظر به روزرسانی کنید. در این حالت دیگه نیاز به دریافت مجدد اطلاعات از دیتابیس نیست.
آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 25 شهریور 1396 در 17:26 عصر
با سلام
ابتدا خصوصیات دیتاگرید را به شکل زیر تغییر دهید:
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;
}
موفق باشید
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها
سلام این مورد خیلی هم خوب کار میکنه در صورتی که کاربر روی ستون کلیک نکنه و ترتیب سطرها را تغییر نده . ولی
حالا اگه کاربر روی گرید کلیک کنه و ترتیب رکورد ها جابجا شد بعد از آپدیت شدن دیتا و لود مجدد دیتا ها چون سورت دیتا تغییر میکنه ایندکس سطر انتخابی چون یک بار کلیک کرده تغییر میکنه و دیگه اون سطر انتخابی کاربر نیست برای حل این مورد دیگه خاصیت CurrentRow جوابگو نیست .
برای حل این مورد چه راه حلی موجود هست؟
سلام
در مورد این مشکل بهتره بجای CurrentRow دیتاگرید Id رکورد (انتخاب شده)رو نگه داری بعد از ویرایش یه جسنجو در دیتاگرید انجام بدی و سطری که Id رکورد ان برابر مقدار نگداری شده بود را در DataGrid سلکت کنی
First,solve the problem then write the code
دوستان من مجدد این پست رو آپ میکنم چون یه مشکلی پیش اومده واسم .
من دقیقا بعد از اینکه آپدیت رو انجام دادم دوباره میام و کوئری که اطلاعات رو تویه گرید نشون میده رو فراخوانی میکنم . تا الان باهاش مشکلی نداشتم ولی از موقعی که اومدم و بر اساس یه ستون خاص Order By رو انجام دادم ، سطر مورد نظر انتخاب میشه ولی دوباره میاد و اول دیتاگرید رو نشون میشه .!!!!! (یعنی باس اسکرول کنم تا سطر انتخابی رو ببینم)
چطور میتونم فوکوس دیتاگرید رو هم رویه اون سطر انتخابی بندازم .
مشکل رو از طریق کد پایین حل کردم . ولی هنوز یه موردی داره : اونم اینه که اگه رویه یه ستونی جهت مرتب سازی کلیک کرده باشی بعد از آپدیت فوکوس رویه سطر جاری نمیمونه. این مورد رو چه باید کرد ؟
int saveRow = 0;
if (dataGridView1.Rows.Count > 0)
saveRow = dataGridView1.FirstDisplayedCell.RowIndex;
if (saveRow != 0 && saveRow < dataGridView1.Rows.Count)
dataGridView1.FirstDisplayedScrollingRowIndex = saveRow;
آخرین ویرایش به وسیله jafarpalideh : چهارشنبه 03 آبان 1396 در 14:43 عصر دلیل: اشتباه تایپی
اینو من هم دنبالشم
اگه کسی نمونه ای داره قرار بده
privatevoidbtnUpdate_Click(objectsender, 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];
}
من این کد رو اینطوری اصلاح کردم تست کنید جواب میده موفق باشید