من یه برنامه نوشتم با دیتا بیس َاکسس حلا میخوام ستون دیتا iD دردیتا گرید ویو خودکار عدد بگیره واگر یه ردیف هم پاک کردم ستونم عدد مشکل پیش نیاد لطفا کمک کنید
من یه برنامه نوشتم با دیتا بیس َاکسس حلا میخوام ستون دیتا iD دردیتا گرید ویو خودکار عدد بگیره واگر یه ردیف هم پاک کردم ستونم عدد مشکل پیش نیاد لطفا کمک کنید
خصوصیت identity specificatin فیلد id رو برابر yes کنید.
اگر اکسس هم هست که خیلی راحتتره فیلد رو از نوع auto number بزار
*********
شما با مفهوم AutoNumber درست آشنا نشدید وقتی به یک رکورد یه شمازه اختصاص داده می شه اون رو منحصر به فرد می کنه و یه کلید محسوب می شه ونمی شه دوباره با حذف یه شماره شماره ها مرتب بشن چون کلید یه رکورد مختص همون رکورده
راه حل :
شما یه ستون اضافه کنید به دیتاگریدتون و زمانی که اطلاعات بایند میشه تو گرید یه حلقه بزارید که به تعداد رکوردهای دیتاتیبل عدد بریزه تو ستون ردیف.
دوست عزیز میدونم که اون فیلدی که از نوع Autonumber هست خودش میشه فیلد کلیدی چون واسه هر رکورد عددی منحصر به فرد تولید میکنه ولی فکر نمیکنم راه حل شما منطقی باشه چون فکرش رو بکنین ممکنه که مثلا 5000 (یا حتی بیشتر !) رکورد داشته باشیم اونوقت با دستور For یه کم وقت میبره ممکنه قابل چشم پوشی باشه ولی فکر نمیکنم از لحاظ منطقی درست باشه ، منم واسه این سوال پرسیدم گفتم شاید بشه داخل بانک اینکارو انجام داد و از دستور For دیگه استفاده نشه. باز هم ممنون از لطفتون.
احتمالا شما تازه شروع به برنامه نویسی کردید
راحل حلی که گفتم بنظرم بهترین وسریع ترین راهه- شایدهم تنهاراه باشه
و برا همچین کاری اصلا زمان مطرح نیست
یه راه دیگه هم هست من خودم از این روش استفاده می کنم
این روش دیگه Auto Number رو از بانکت انتخاب نمی کنی بلکه خودت با کد نویسی Auto Number رو درست می کنی
اول از همه اطلاعات رو از بانک توی یه دیتا گیرید به صورت Order By ID می ریزیم
خب اگه گرید ویو هیچی نباشه یعنی اولین داده است پس کد ما 1
اگه هم وجود داشت آخرین مقدار رو + 1 می کنیم و کد جدید به ما داده میشه
کدش هم براتون می زارم من خودم از این روش استفاده می کنم
if (dataGridView2.Rows.Count.ToString() == "0")
{
textBox_code_car.Text = "1";
}
else
{
for (int Counter = 0; Counter < (dataGridView2.Rows.Count); Counter++)
{
if (dataGridView2.Rows[Counter].Cells["Code_Car"].Value != null)
{
if (dataGridView2.Rows[Counter].Cells["Code_Car"].Value.ToString().Length != 0)
{
textBox_code_car.Text = (int.Parse(dataGridView2.Rows[Counter].Cells["Code_Car"].Value.ToString()) + 1).ToString();
}
}
}
}
این روش غیر معمول هست ومرتبه زمانی اون بیشتر از روش اوله
موفق باشید
شما اگه فقط میخوای توی دیتاگریدویو یک Autonumber داشته باشی باید یک فیلد به جدول در دیتاست برنامه اضافه کنی که این خاصیت رو داشته باشه.
DataTable1.Columns.Add("FieldName",typeof(int));
DataTable1.Columns["FieldName"].AutoNumber=true;
سلام دوست عزیز شما تو بانک قصد دارید که ردیف به صورت ترتیبی و صعودی باشه که اتونامبر گزینه خوبیه حالا مسکل چیه؟
اینه که وقتی جدول خالی میشه رکورد جدید از انتهای رکورد حذف شده شروع میشه؟
خود تو برنامه خودتون Max(id) رو بگیرید بعلاوه 1 بکنید
اما آخرین مورد وقتش نشده به سمت sql برید اکسس چی داره بهش گیر دادید
شما اگه رکورد کلید اصلی نباشه و به جایی رابطه نداشته باشه آره راه بهتری هست
نگاه کن مثلا شما ردیف 1 و 2 و 3 4 دارید حالا ردیف 2 حذف میشه شما علاوه برحذف باید آخرین رکورد رابجای رکورد 2 بیارید البته یه روشه
اما تو سیستم های امروزی روش حلقه خوبه حتی رکوردهای زیادم داشته باشی محسوس نیست و منروش دوست عزیزمون رو تائید میکنم