2016-07-01 3 views
0

я хочу, чтобы установить значение в определенной ячейке в МОФ и я использую этот код, но GetRow и GetCell метод показать эту ошибкуустановленное значение в ячейке в DataGrid в WPF в C#

«DataGrid» не содержат определение для «GetRow» и не может быть найден метод расширения «GetRow», принимающий первый аргумент типа «DataGrid» (вам не хватает директивы использования или ссылки на сборку?)

«DataGrid» не содержит определение для 'GetCell' и no метод расширения 'GetCell', принимающий первый аргумент типа 'DataGrid' можно найти (ar е Вы не нашли с помощью директивы или ссылки сборки) ControlSolution.Form

и ошибки в общественном классе UCfrmRaafaLevelsUp парциального: UserControl

метод расширения должно быть определен в необщем статическом классе

код я использую его

public 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; 
} 

public static DataGridRow GetSelectedRow(this DataGrid grid) 
{ 
    return (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem); 
} 
public static DataGridRow GetRow(this DataGrid grid, int index) 
{ 
    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index); 
    if (row == null) 
    { 
     // May be virtualized, bring into view and try again. 
     grid.UpdateLayout(); 
     grid.ScrollIntoView(grid.Items[index]); 
     row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index); 
    } 
    return row; 
} 

public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column) 
{ 
    if (row != null) 
    { 
     DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row); 

     if (presenter == null) 
     { 
      grid.ScrollIntoView(row, grid.Columns[column]); 
      presenter = GetVisualChild<DataGridCellsPresenter>(row); 
     } 

     DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); 
     return cell; 
    } 
    return null; 
} 

public static DataGridCell GetCell(this DataGrid grid, int row, int column) 
{ 
    DataGridRow rowContainer = grid.GetRow(row); 
    return grid.GetCell(rowContainer, column); 
} 

в этой должности Change DataGrid cell value programmatically in WPF

+1

Как сказано в сообщении об ошибке, обычно при создании методов расширения вы определяете статический класс в одном файле, где хотите, поместите метод расширения в этот класс, а затем установите использование, в котором вы хотите использовать методы расширения, в пространство имен где добавлен статический класс расширения. –

+0

есть другой ответ ??? –

ответ

-1

Методы расширения должны быть частью цепочки наследования. Если ваш метод находится в отдельном классе (а не DataGrid, и ни родительский, ни дочерний его), просто сделайте его обычным статическим методом и вызовите этот метод статически.

Логически, вы не можете добавить метод расширения к самому DataGrid и его классам предков, и похоже, что вы не подклассифицируете DataGrid, так что это не сработает.

+0

Каково решение ??? –

+0

и в чем смысл методов расширения ??? –

+0

есть другой ответ ??? –

2

Методы расширения - это статические методы, которые называются методами экземпляра для типа, который они были созданы. например: метод GetCell(), который вы создали. Он использует ссылку DataGrid для вызова этого метода. Такие методы должны быть определены в отдельном статическом классе. Поместите эти методы GetSelectedRow, GetCell, GetRow в другой статический класс, и код должен работать.

Смежные вопросы