ورود

View Full Version : سوال: مخفی کردن یک ستون خاص در listview



kingtak
شنبه 23 دی 1391, 20:33 عصر
سلام دوستان
آیا توی لیست ویو امکان مخفی یا نمایان کردن یک ستون وجود داره؟
مثلا یه کانتکست منو تعریف کنیم و اگه هر کدوم از آیتم هاش انتخاب شد ستون مربوطه توی لیست ویو مخفی یا ظاهر بشه؟

kingtak
دوشنبه 25 دی 1391, 00:59 صبح
یه فکری به نظرم رسید اینه که عرض ستونهای گرید ویو داخل لیست ویو رو برابر صفر بذارم.اینجوری دیده نمیشه.


<GridViewColumn x:Name="name" Width="0" Header=" Name" DisplayMemberBinding="{Binding name}"/>



حالا میخوام بدونم آیا میشه از طریق کد C#‎ به خاصیت width ستون تو xaml دسترسی پیدا کنم؟
میخوام یه کانتکست منو برای هدرش قرار بدم و با انتخاب آیتم مورد نظر عرض ستون رو تغییر بدم!!!!
آیا امکانش هست؟

مهدی فرزاد
دوشنبه 25 دی 1391, 09:18 صبح
سلام
من بشخصه تا به حال به این موضوع فکر نکرده بودم
ظاهره GridViewColumn ها خاصیتی جهت مخفی شدن ندارن پس باید کمی اون رو دور زد!!
صفر قرار دادن عرض ستون کار شندنی هست اما مشکلی داره اونم اینه که کاربر میتونه با موس عرض ستون رو به حالت اول برگردونه کد اون مثلا برای کم کردن عرض اولین ستون به شکل زیر هست


(this.listview.View as GridView).Columns[0].Width = 0;

ولی راه صحیحی نیست
بهتره ستون مورد نظر رو Remove کنید


(this.listview.View as GridView).Columns.RemoveAt(0);


حالا ممکنه سئوال پیش بیاد که اگر بخواهیم ستون مورد نظر رو برگردونیم باید چکار کنیم؟
روش کار میتونه به شکل زیر باشه (این به ذهنم رسید و جواب هم داد )
ابتدا قبل از حذف کردن ستون یک کپی از اون درست میکنیم همچنین شماره ایدکس اون رو هم نگه میدارم


GridViewColumn column = new GridViewColumn();
int columnIndex;
private void Button_Click_1(object sender, RoutedEventArgs e)
{
column = (this.listview.View as GridView).Columns[0];
columnIndex = (this.listview.View as GridView).Columns.IndexOf(column);
(this.listview.View as GridView).Columns.RemoveAt(0);

}



حالا برای برگردوندن اون میتونید بنویسید


(this.listview.View as GridView).Columns.Insert(columnIndex, column);


شما میتونید یک کالکشن هم از ستون ها درست کنید که برای بازگشت به همه اون ها دسترسی داشته باشید

kingtak
دوشنبه 25 دی 1391, 20:02 عصر
من برای رویداد کلیک هر آیتم از منو این کد رو تعریف کردم و خاصیت checked رو برای همه آیتم ها فعال کردم:

if (this.item1.IsChecked)
(this.lV.View as GridView).Columns.Add(id);
else
(this.lV.View as GridView).Columns.Remove(id);


کاملا درست کار میکنه فقط مشکل اینه که بعد از حذف هر ستون و اضافه کردن اون ، ستون به آخر لیست ویو اضافه میشه(یعنی جایگاه اولیشو از دست میده)
با روشی که شما پیشنهاد دادید((this.listview.View as GridView).Columns.IndexOf(column)) درسته شماره ستون توی متغیر columnIndex ذخیره میشه ولی وقتی بعدا میخوام ستون رو با این شماره اضافه کنم خطا میده!!!
چون وقتی یه ستون حذف میشه شماره ستون ها از صفر شماره گذاری میشن.
ولی در کل کارمو راه میندازه!!!
ممنون از لطف شما!:قلب: