PDA

View Full Version : سوال: چگونه جابجایی ستونها و ترتیب جدید را در DataGridView ذخیره کنیم



Mercede3000
سه شنبه 03 خرداد 1401, 01:05 صبح
سلام دوستان،
من یک دیتاگریدویو دارم که به Dataset وصل است. وقتی ستونها را جابجا میکنم و ترتیب جدیدی به آن میدهم به محض بیرون
رفتن از برنامه و اجرای مجدد آن، ستونها به ترتیب قبلی خود برمیگردند.
سوال : چگونه و به چه ترتیبی جایگاه جدید ستونها را ذخیره کنیم که در اجراهای بعدی بهمان صورت باقی بمانند؟
با تشکر از لطف شما.

پرستو پارسایی
سه شنبه 03 خرداد 1401, 11:13 صبح
وفتی اطلاعات رو تو دیتا گرید بایند میکنی میتونی ترتیب مورد نظرتون رو اعمال کنید .در خط سوم میتونید جابجایی رو اعمال کنید. از نوع سوال شما من چنین برداشتی کردم

Dim dt = New DataTable
Dim cnn As New SqlConnection("Connection")
Dim sqlcmd As New SqlCommand("SELECT ID, Name, Phone FROM TBL_Me WHERE Phone = @Phone", cnn)
sqlcmd.Parameters.Add(New SqlParameter("@Name", txtName.text))
sqlcmd.Parameters.Add(New SqlParameter("@Phone", txtPhone.Text))
Dim ad = New SqlDataAdapter(sqlcmd)
ad.Fill(dt)
DataGridView1.DataSource = dt
cnn.Close()

Mercede3000
سه شنبه 03 خرداد 1401, 12:44 عصر
سلام ،
ممنون از توجه شما .
منظور من بعد از بایند شدن بود، یعنی کاربر در RunTime بتونه ترتیب ستونها رو عوض کنه و بعد از اینکه از برنامه بیرون اومد و
وقتی دوباره برنامه رو اجرا میکنه ترتیب ستونها مطابق با آخرین تغییراتی باشه که به ستونها داده.

پرستو پارسایی
چهارشنبه 04 خرداد 1401, 09:59 صبح
یکی از دلایلی که پاسخ دریافت نمیشه اینه که سوال برای مخاطب خوب مطرح نمیشه مثلا در پرسش شما اینکه کاربرها چگونه و چرا باید دسترسی به ترتیب ستونها را داشته باشند . هدف برای مخاطب شما مشخص نیست پس پاسخ مناسب با سوالتان دریافت نخواهید کرد . ابتدا یک شمای کلی از نوع مشکلتان بفرمایید تا برای دوستان در انجمن سوال مفهوم تر باشه تا به پاسخ مورد نظرتان برسید

mazoolagh
پنج شنبه 05 خرداد 1401, 08:44 صبح
سلام دوستان،
من یک دیتاگریدویو دارم که به Dataset وصل است. وقتی ستونها را جابجا میکنم و ترتیب جدیدی به آن میدهم به محض بیرون
رفتن از برنامه و اجرای مجدد آن، ستونها به ترتیب قبلی خود برمیگردند.
سوال : چگونه و به چه ترتیبی جایگاه جدید ستونها را ذخیره کنیم که در اجراهای بعدی بهمان صورت باقی بمانند؟
با تشکر از لطف شما.

سلام و روز خوش
پرسش شما 2 بخش داره:
1- این که چجوری ترتیب ستون ها رو ذخیره کنیم و دوباره بخونیم که این مثل همه روشهای customize کردن نیازمند یک جدول مناسب هست،
و لازمه اش این هست که بدونین ترتیب نمایش ستونها چگونه مشخص میشه.

2- بخش بعدی این هست که چجوری با کد این ترتیب رو اعمال کنیم.

یک راه همین هست که در پست شماره 2 آمد (ولی بیانش چندتن گویا نبود) و اون این که ترتیب آمدن فیلدها در دستور select همین ترتیب نمایش اون ها هم هست،
پس کافی هست دستور رو تغییر بدیم - البته کاملا منطقی بنظر میاد و در عمل هم همه دیدیم که همینجور هست.
ولی من خودم اطمینان کامل ندارم که همیشه همینجور باشه و شاید در حالتهایی از این وضعیت پیروی نکنه.
گذشته از این، بهتر هست بجای دستکاری یک string و چسبوندن تکه های مختلف به هم مستقیما با خود دیتاگریدویو کار کنیم (البته نظر شخصی من هست)

mazoolagh
پنج شنبه 05 خرداد 1401, 08:56 صبح
هر ستون دیتاگریدویو یک ویژگی به اسم displayindex داره که ترتیب نمایش اون رو مشخص میکنه.
همچنین یک ویژگی دیگه به اسم datapropertyname داره که مشخص میکنه به کدوم فیلد از جدول bind شده.
با این حساب یک جدول (مثلا به اسم ColumnsOrder) میسازیم و برای هر ستون این مقادیر رو در اون میریزیم.

حالا کافی هست یک حلقه به ازای هر ستون دیتاگریدویو بسازیم که براساس datapropertyname اون ستون مقدار displayindex رو از ColumnsOrder بخونه و اعمال کنه.

برای ذخیره وضعیت ستونها هم در رخداد form closing حلقه مشابهی میسازیم ولی این بار مقادیر رو ذخیره میکنیم.

Mercede3000
پنج شنبه 05 خرداد 1401, 12:21 عصر
هر ستون دیتاگریدویو یک ویژگی به اسم displayindex داره که ترتیب نمایش اون رو مشخص میکنه.
همچنین یک ویژگی دیگه به اسم datapropertyname داره که مشخص میکنه به کدوم فیلد از جدول bind شده.
با این حساب یک جدول (مثلا به اسم ColumnsOrder) میسازیم و برای هر ستون این مقادیر رو در اون میریزیم.

حالا کافی هست یک حلقه به ازای هر ستون دیتاگریدویو بسازیم که براساس datapropertyname اون ستون مقدار displayindex رو از ColumnsOrder بخونه و اعمال کنه.

برای ذخیره وضعیت ستونها هم در رخداد form closing حلقه مشابهی میسازیم ولی این بار مقادیر رو ذخیره میکنیم.

سلام ،
ممنون از توجه شما ،
بنظر میرسه که با این راهی که دادید به نتیجه برسم.
تست میکنم و نتیجه رو میگم.
ممنون از لطف شما.