PDA

View Full Version : سوال: چطوری مقدار یک سلول DataGrid در Wpf رو به دست بیاریم



omiditc
سه شنبه 25 تیر 1392, 02:30 صبح
سلام.
این دستور در WinForm جواب میده

int a= datagridview1.CurrentRow.cells[0].value.tostring();//Exm

معادل این دستور در WPF چیه؟؟؟

omiditc
سه شنبه 25 تیر 1392, 11:04 صبح
دوستان یه لطفی کنین جواب بدین منتظریم :لبخندساده:

mymina
سه شنبه 25 تیر 1392, 11:05 صبح
سلام
ابتدا تابع زیر را در برنامه قرار بده

static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null) child = GetVisualChild<T>(v);
if (child != null) break;
}
return child;
}
سپس در قسمت selectionChenge با دستورات زیر می توان مقدار ستون مورد نظر را پیدا نمود در دستور (ContainerFromIndex(1 ستون مورد نظر را وارد می کنید


DataGrid dataGrid = sender as DataGrid;
if (e.AddedItems != null && e.AddedItems.Count > 0)
{
// find row for the first selected item
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.Conta inerFromItem(e.AddedItems[0]);
if (row != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
// find grid cell object for the cell with index 0
DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromInde x(1) as DataGridCell;
if (cell != null)
{
Console.WriteLine(((TextBlock)cell.Content).Text);
int a =Convert.ToInt32( ((TextBlock)cell.Content).Text);
}
}
}

omiditc
سه شنبه 25 تیر 1392, 13:28 عصر
ممنون از شما.این رو VS2012 ارور داره
e.AddedItems[0] رو نمیشناسه

mymina
سه شنبه 25 تیر 1392, 13:57 عصر
باید تو selectionCheng دیتاگرید نوشته شود تا e.AddedItems[0] رو بشناسه

private void dgBlock_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dataGrid = sender as DataGrid;
if (e.AddedItems != null && e.AddedItems.Count > 0)
{
// find row for the first selected item
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.Conta inerFromItem(e.AddedItems[0]);
if (row != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
// find grid cell object for the cell with index 0
DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromInde x(1) as DataGridCell;
if (cell != null)
{
Console.WriteLine(((TextBlock)cell.Content).Text);
clscmp.IdBlock =Convert.ToInt32( ((TextBlock)cell.Content).Text);
}
}
}}

mymina
سه شنبه 25 تیر 1392, 14:00 عصر
اگر بازم مشکل داشت به نحوه بایند اطلاعاتتون به دیتاگرید بستگی داره

Direlap
پنج شنبه 24 مرداد 1392, 18:04 عصر
با این روش به جواب رسیدم ولی ایا راه حل بهتر و ساده تری نداره ؟

mymina
شنبه 26 مرداد 1392, 09:10 صبح
نمی دونم راه حلی که من پیدا کردم این بود فکر می کنم راه حل ساده تری داشته باشه