مشکل در مرتب کردن شماره ردیف های دیتا گردید - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در مرتب کردن شماره ردیف های دیتا گردید

+1 امتیاز

سلام

من وقتی یه رکورد از دیتا گرید را حذف میکنم شماره ردیف ها تغییر نمیکنند مثلا اگر ردیف شماره دو حذف شد میخوام ردیف ها یک عدد بیان عقب چطورب باید این کار رو بکنم

با تشکر

سوال شده اسفند 18, 1392  بوسیله ی mohsen1365 (امتیاز 23)   3 3 4
دوباره تگ گذاری شد اسفند 24, 1392 بوسیله ی BlueBlade
سلام.

این شماره ردیف ها رو از ابتدا چطور ایجاد کردید؟ آیا درون جدول ستونی برای شماره ردیف در نظر گرفتید؟ یا موقع سلکت زدن به رکوردها شماره سطر اضافه می کنید؟ یا از روش دیگه ای استفاده می کنید؟

لطفا توضیح کاملی بدید تا راهنمایی مناسبی رو بشه انجام داد.
بله ستونی با نام id در نظر گرفتم و در تنظیمات sql آن را اتوماتیک تنظیم کردم که خودش عدد بزنه

2 پاسخ

+3 امتیاز

ای دی در اس کیو ال اگر حذف شد دیگه به هیچ عنوان تولید نمیشه

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

 

یک متد بنویسید و در جاهایی که تعداد و ترتیب سطرها تغییر میکنه اونو فراخوانی کنید.

 

private void setRowNumbers()
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.HeaderCell.Value = (row.Index + 1).ToString();
    }
}
 
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    setRowNumbers();
}
 
private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
    setRowNumbers();
}
 
private void dataGridView1_Sorted(object sender, EventArgs e)
{
    setRowNumbers();
}

 

پاسخ داده شده اسفند 19, 1392 بوسیله ی Mr.Mohammad (امتیاز 189)   17 17 24
+3 امتیاز

سلام.

همونطور که دوستمون هم گفتن تغییر id جدولتون کار صحیحی نیست چراکه کلید اصلی این جدول ممکنه برای  جداول دیگه در نقش کلید خارجی بکار رفته باشه که تغییر id میتونه مشکلات زیادی رو براتون ایجاد کنه. توصیه من به شما این هست :

موقع سلکت زدن از تابع Row_Number برای تولید شماره سطر برای رکوردهاتون استفاده کنید و زمانیکه رکوردی رو حذف می کنید، کافیه همین ستون شماره سطر رو از طریق دیتایتبل (یا دیتاست) ویرایش کنید یا مستقیما ویرایش رو بر روی ستون گرید اعمال کنید (در رکوردهای زیاد اصلا توصیه نمیشه چون سرعت رو میاره پایین، پس بهتره شی منبعی (دیتایتبل) رو که به گرید وصل میکنید مورد ویرایش قرار بدید).

برای Select می تونید از کوئری زیر استفاده کنید :

select *,ROW_NUMBER() over(order by id ) as radif  from person

کوئری بالا علاوه بر برگشت تمام ستون های جدول person، یک ستون هم با نام radif بر میگردونه که در واقع شماره سطر هستش.

حالا زمانیکه میخواید یک سطر رو حذف می کنید، مقدار ستون radif رو برای سطری که می خواید حذف کنید، بردارید و دیتاتیبل رو به شکل زیر فیلتر و دوباره به گرید متصل کنید :

int RadifDeleted = Convert.ToInt32(dataGridView1.CurrentRow.Cells["radif"].Value);
            // دستورات حذف رو در این قسمت بنویسید
            dt.DefaultView.RowFilter = "radif Not IN(" + RadifDeleted + ")";
            dt = dt.DefaultView.ToTable();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dt.Rows[i]["radif"] = i + 1;
            }
            dataGridView1.DataSource = dt;

موفق باشید.

پاسخ داده شده اسفند 19, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
...