View Full Version : سوال: تشخیص ستون انتخاب شده در دیتاگرید
water_lily_2012
چهارشنبه 28 تیر 1391, 09:46 صبح
سلام
چگونه می توان با کلیک روی Header یک ستون در دیتاگرید نام ستون را بدست آورد؟
یاسردرا
پنج شنبه 29 تیر 1391, 00:03 صبح
سوالتان کمی گنگ بنظر میرسه(ازنظرمن)
عزیز شاید این بدردت بخوره:
http://barnamenevis.org/showthread.php?349467-%D8%A8%D8%B1%DA%AF%D8%B1%D8%AF%D8%A7%D9%86%D8%AF%D 9%86-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-%DB%8C%DA%A9-%D8%B3%D9%84%D9%88%D9%84-%D8%AF%D8%B1-datagrid
water_lily_2012
پنج شنبه 29 تیر 1391, 14:28 عصر
سلام
می خواهم با کلیک روی هدر یک ستون، نام یا خود هدر یا نام بایند ان ستون را بدهد.
کدی که نوشتم باید حتما یکی از سلول ها انتخاب شده باشه وگرنه خطا صادر میشه.
Amir Oveisi
جمعه 30 تیر 1391, 18:39 عصر
از آنجایی که متد یا رویداد خاصی برای این کار وجود نداره، ساده ترین راه اینه که شما رویداد PreviewLeftMouseButtonUp رو برای datagrid تون handle کنید و تو اون، از OriginalSource رویداد شروع کرده و تو Visual Tree کنترل datagrid ای که دارید به سمت بالا حرکت کنید تا برسید به ColumnHeader. (البته اگر ColumnHeader انتخاب شده باشه میرسید بهش). بعد محتوای اونو بدست میارید:
var dObject = (DependencyObject)e.OriginalSource;
while ((dObject != null) && !(dObject is DataGridCell) && !(dObject is DataGridColumnHeader))
dObject = VisualTreeHelper.GetParent(dObject);
if (dObject == null)
return;
if (dObject is DataGridColumnHeader)
{
var columnHeader = dObject as DataGridColumnHeader;
MessageBox.Show(columnHeader.Column.Header.ToStrin g());
}
موفق باشید
مهدی فرزاد
شنبه 31 تیر 1391, 08:18 صبح
سلام
من یک پیشنهاد دارم
میتونید استایل ( یا تمپلت ) هدر رو ویرایش کنید و در اون یک دکمه با پکگراند Transparent (حتما رنگ به بکگراند بدید و opacity رنگ رو صفر بگذارید) قرار بدید و Tag اون رو Bind کنید به Content هدر و یک اونت کلیک برای اون ایجاد کنید
حالا در اون بنویسید
MessageBox.Show((sender as Button).Tag.ToString());
water_lily_2012
شنبه 31 تیر 1391, 09:07 صبح
تشکر از هر دو بزرگواری که جواب دادند.
حالا اگر نام ستون را بخواهم چه تغییری بدهم؟؟؟
مهدی فرزاد
یک شنبه 01 مرداد 1391, 08:00 صبح
سلام
شما میتنوید Index اون رو بدست بیارید
برای ان کار همون استایل من رو استفاده کنید و کد کد آقای اویسی رو با کمی تغییر در همون Event که من برای Button گذاشتم مینویسید
کد به شکل زیر است
private void button_Click(object sender, System.Windows.RoutedEventArgs e)
{
var dObject = (DependencyObject)sender;
while ((dObject != null) && !(dObject is DataGridColumnHeader))
dObject = VisualTreeHelper.GetParent(dObject);
if (dObject == null)
return;
if (dObject is DataGridColumnHeader)
{
var columnHeader = dObject as DataGridColumnHeader;
MessageBox.Show(columnHeader.Column.DisplayIndex.T oString());
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.