PDA

View Full Version : مبتدی: اضافه کردن شماره های با ترتیب دلخواه به یک ستون از دیتاگرید



khajooei7185
سه شنبه 07 فروردین 1403, 10:15 صبح
با سلام خدمت همه اساتید
من یک برنامه ویندوز فرم دارم مینویسم و خیلی مبتدی هستم و با همین برنامه دارم یاد میگیرم
مشکلی که دارم اینه که یک دیتاگریدویو دارم که اطلاعاتش از دیتابیس میاد و شامل یک ستون به نام دسته هستش که بر اساس ایتم های یک کمبوباکس دسته بندی میشود. حالا میخوام توی ستونی به نام خط، جلوی دسته بندی ترتیب عددهای پیش فرض خودم نوشته بشه به این صورت که مثلا در دسته شماره یک که شامل 6 نفر هست به ترتیب به هر نفر عددهای 3 و 4 و 2 و 5 و 1 و 6 قرار بگیره.
و به همین ترتیب برای دسته های دیگر هم همین حالت.
ممنون میشم کمک کنید به شدت کارم گیر کرده

alexmcse
پنج شنبه 09 فروردین 1403, 04:18 صبح
سلام
اگر با تصویر نشان میدادی که میخواهی چکار کنی بهتر میشد راهنمایی کرد

khajooei7185
پنج شنبه 09 فروردین 1403, 11:14 صبح
سلام
اگر با تصویر نشان میدادی که میخواهی چکار کنی بهتر میشد راهنمایی کرد

طبق عکس من ستون (خط) رو میخوام خروجی داشته باشم

mazoolagh
پنج شنبه 09 فروردین 1403, 11:46 صبح
سلام و روز خوش
به عبارتی میخواین روی "دسته" گروه بندی و برای هر گروه row number جدا داشته باشین، درسته؟

شاید اگر در سطح دیتابیس انجام بدین راحتتر باشه - بخصوص اگر از sql استفاده میکنین.

khajooei7185
پنج شنبه 09 فروردین 1403, 17:30 عصر
سلام و روز خوش
به عبارتی میخواین روی "دسته" گروه بندی و برای هر گروه row number جدا داشته باشین، درسته؟

شاید اگر در سطح دیتابیس انجام بدین راحتتر باشه - بخصوص اگر از sql استفاده میکنین.

سلام و درود
بله همینطوره و مشکلی هم نیست اگه در سطح sql باشه فقط میخوام این شماره ردیف رو به صورت دلخواه خودم بزنم یعنی ترتیبشو مشخص کنم

پرستو پارسایی
جمعه 10 فروردین 1403, 19:11 عصر
می‌تونید از رویداد RowDataBound دیتاگریدویو استفاده کنید. در این رویداد ، می‌تونید مقادیر ستون مورد نظر را بر اساس ترتیب دلخواه خود تنظیم کنید.
اول ، باید کمبوباکس دسته‌ها را پر کنید و بعد از انتخاب هر دسته ، ترتیب مربوط به آن دسته را بر روی ستون خط دیتاگریدویو تنظیم کنید. می‌تونید از دستورات LINQ برای مرتب‌سازی داده‌ها استفاده کنید.
ستون خط برای نگهداری ترتیب مورد نظر استفاده می‌شه . این مثال و با ساختار برنامتون شخصی سازی کنید . امیدوارم مفید واقع بشه
private void dataGridView1_RowDataBound(object sender, DataGridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// دریافت مقدار دسته از سلول مورد نظر
string category = e.Row.Cells["دسته"].Value.ToString();


// محاسبه ترتیب بر اساس دسته
int[] order = { 3, 4, 2, 5, 1, 6 };


// تنظیم مقدار جدید برای ستون خط
e.Row.Cells["خط"].Value = order[Array.IndexOf(order, int.Parse(category))];
}
}

shahryari
شنبه 11 فروردین 1403, 12:40 عصر
سلام
با دستور اسکیوال تست کن ببین جواب میگیری
select * from table order by khat group by daste

khajooei7185
یک شنبه 12 فروردین 1403, 10:54 صبح
نه این مورد جواب نداد متاسفانه

khajooei7185
یک شنبه 12 فروردین 1403, 10:55 صبح
این مورد هم توی خروجی ستون خط خالیه

khajooei7185
یک شنبه 12 فروردین 1403, 11:10 صبح
می‌تونید از رویداد RowDataBound دیتاگریدویو استفاده کنید. در این رویداد ، می‌تونید مقادیر ستون مورد نظر را بر اساس ترتیب دلخواه خود تنظیم کنید.
اول ، باید کمبوباکس دسته‌ها را پر کنید و بعد از انتخاب هر دسته ، ترتیب مربوط به آن دسته را بر روی ستون خط دیتاگریدویو تنظیم کنید. می‌تونید از دستورات LINQ برای مرتب‌سازی داده‌ها استفاده کنید.
ستون خط برای نگهداری ترتیب مورد نظر استفاده می‌شه . این مثال و با ساختار برنامتون شخصی سازی کنید . امیدوارم مفید واقع بشه
private void dataGridView1_RowDataBound(object sender, DataGridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// دریافت مقدار دسته از سلول مورد نظر
string category = e.Row.Cells["دسته"].Value.ToString();


// محاسبه ترتیب بر اساس دسته
int[] order = { 3, 4, 2, 5, 1, 6 };


// تنظیم مقدار جدید برای ستون خط
e.Row.Cells["خط"].Value = order[Array.IndexOf(order, int.Parse(category))];
}
}
میشه لطف کنید بیشتر توضیح بدین

mmbguide
چهارشنبه 15 فروردین 1403, 21:32 عصر
سلام

پاسخ در آدرس زیر موجود است:
https://stackoverflow.com/questions/20848834/linq-to-sql-row-number-per-group

اگر هم خواستید اطلاعات را به همراه شماره ردیف از بانک اطلاعاتی دریافت کنید:
https://stackoverflow.com/questions/11116275/increment-row-number-on-group

khajooei7185
چهارشنبه 15 فروردین 1403, 22:00 عصر
سلام

پاسخ در آدرس زیر موجود است:
https://stackoverflow.com/questions/20848834/linq-to-sql-row-number-per-group

اگر هم خواستید اطلاعات را به همراه شماره ردیف از بانک اطلاعاتی دریافت کنید:
https://stackoverflow.com/questions/11116275/increment-row-number-on-group

ممنون از پاسختون فقط چیزی که هست این کوئری ها قابلیت شماره گذاری با ترتیب دلخواه رو ندارن

mmbguide
چهارشنبه 15 فروردین 1403, 23:55 عصر
سعی میکنم در اولین فرصت نمونه کد برات بفرستم

mmbguide
پنج شنبه 16 فروردین 1403, 23:01 عصر
قبل از اینکه بخوام کدی را بنویسم بفرمایید منظورتان از اینکه شماره دلخواه بدید یعنی چی. به هر حال لیست بازگشتی باید از یک مبنایی برای Sort کردن استفاده کرده باشه. خب این کار را در همان سطح SQL انجام بدید. اما اگر منظورتان این هست که مثلا اگر در GridView بارگذاری کردید و در هر زمان کا کاربر با کلیک روی نام ستون Sort را تغییر داد و شما می خواهیم همان ترتیب اولیه شماره گذاری بدون در نظر گرفتن مبنای Sorting انجام بشه که داستان متفاوت میشه.

khajooei7185
شنبه 18 فروردین 1403, 10:48 صبح
قبل از اینکه بخوام کدی را بنویسم بفرمایید منظورتان از اینکه شماره دلخواه بدید یعنی چی. به هر حال لیست بازگشتی باید از یک مبنایی برای Sort کردن استفاده کرده باشه. خب این کار را در همان سطح SQL انجام بدید. اما اگر منظورتان این هست که مثلا اگر در GridView بارگذاری کردید و در هر زمان کا کاربر با کلیک روی نام ستون Sort را تغییر داد و شما می خواهیم همان ترتیب اولیه شماره گذاری بدون در نظر گرفتن مبنای Sorting انجام بشه که داستان متفاوت میشه.

من میخوام فقط برای هر دسته از شماره گذاری به صورت دلخواه استفاده بشه و در همون سطح sql باشه کافیه
مثلا دسته شماره سه به این صورت باشه
3 3
3 4
3 2
3 5
3 1
3 6

و دسته بعدی اگر تعداد کمتر باشه مثلا

4 3
4 4
4 2
4 5
4 1

امیدوارم تونسته باشم منظورمو برسونم

Mahmoud.Afrad
شنبه 18 فروردین 1403, 19:53 عصر
اگر این شماره گذاری توسط کاربر تعیین میشود باید امکان ویرایش رو به کاربربدید.
بعد از ثبت اعداد ، هم با کوئری و هم سمت برنامه میتونید روی هر دو ستون مرتبسازی کنید.

mmbguide
شنبه 18 فروردین 1403, 20:16 عصر
شما باید منطق این شماره گذاری را اعلام کنید. فرض کنید 100 تا گروه دارید و هر گروه 500 آیتم داره. قطعا نمیشه دستی این کار را انجام بدید. اگر هم باید دستی انجام بشه که هیچ و مطابق نظر پست شماره #16 باید اقدام کنید. ولی اگر قرار باشه کدهای برنامه این کار را انجام بدهند باید منطق این شماره گذاری را پیدا کنید بعد اون را به کد کد تبدیل کنید.

khajooei7185
دوشنبه 20 فروردین 1403, 10:51 صبح
اگر این شماره گذاری توسط کاربر تعیین میشود باید امکان ویرایش رو به کاربربدید.
بعد از ثبت اعداد ، هم با کوئری و هم سمت برنامه میتونید روی هر دو ستون مرتبسازی کنید.

شماره گذاری توسط کاربر انجام نمیشود و به صورت دیفالت همین ترتیبی که نوشتم دارد. فقط کدی رو میخوام که همین ترتیب رو به هر دسته اختصاص بده

khajooei7185
دوشنبه 20 فروردین 1403, 10:53 صبح
شما باید منطق این شماره گذاری را اعلام کنید. فرض کنید 100 تا گروه دارید و هر گروه 500 آیتم داره. قطعا نمیشه دستی این کار را انجام بدید. اگر هم باید دستی انجام بشه که هیچ و مطابق نظر پست شماره #16 باید اقدام کنید. ولی اگر قرار باشه کدهای برنامه این کار را انجام بدهند باید منطق این شماره گذاری را پیدا کنید بعد اون را به کد کد تبدیل کنید.

منطق شماره گذاری همین مثالی هست که عرض کردم و هر دسته با همین تعداد ایتم یعنی حداکثر 6 ایتم هستش.

mmbguide
دوشنبه 20 فروردین 1403, 11:36 صبح
تنها راه حل که به ذهن من میرسه اینه که در ساختار جدول جهت نگهداری اطلاعات یک ستون به نام Sequence یا هر نام مناسبی اضافه کنید و یکبار برای همیشه یک شماره به اون تخصیص بدید. موضوع Duplicate بودن را هم باید مدیریت کنید.

khajooei7185
دوشنبه 20 فروردین 1403, 17:53 عصر
تنها راه حل که به ذهن من میرسه اینه که در ساختار جدول جهت نگهداری اطلاعات یک ستون به نام Sequence یا هر نام مناسبی اضافه کنید و یکبار برای همیشه یک شماره به اون تخصیص بدید. موضوع Duplicate بودن را هم باید مدیریت کنید.

میشه مثال یا کدی لطف کنید؟

Mahmoud.Afrad
چهارشنبه 22 فروردین 1403, 03:47 صبح
شماره گذاری توسط کاربر انجام نمیشود و به صورت دیفالت همین ترتیبی که نوشتم دارد. فقط کدی رو میخوام که همین ترتیب رو به هر دسته اختصاص بده

یک جدول به دیتابیس اضافه کنید و مقادیر را با همین ترتیب توی این جدول ذخیره کنید. این جدول را با جدول اطلاعات join کنید.

mmbguide
چهارشنبه 22 فروردین 1403, 21:24 عصر
میشه مثال یا کدی لطف کنید؟

در واقع مدل/جدول شما باید چیزی شبیه نمونه زیر باشد:

public class MyModel
{
public string Name { get; set; }
public string Team { get; set; }
public string Record { get; set; }
public int Category { get; set; }
public int Sequence { get; set; }
}


هر زمان خواستید ردیف جدید اضافه کنید باید دقت کنید که مقدار Sequence به ازای هر Category تکراری ثبت نشود