转:wpf 中获取datagrid 某一行的值 某一列的值 某一行中某一列单元格的值

 public static void SetDataGridCellIsEnabled(DataGrid datagrid, int rowIndex, int[] cellIndexArray, bool IsEnabled)         {             for (int index = 0; index < cellIndexArray.Length; index++)             {                 DataGridCell currentCell = GetDataGridCell(datagrid, rowIndex, cellIndexArray[index]);                 if (currentCell != null)                 {                     currentCell.IsEnabled = IsEnabled;

                    这行代码是隐藏单元格


 

                    Button button1= currentCell.ChildrenOfType<Button>();

                     这行代码是得到模板控件里的子控件                 }             }         }
        public static DataGridCell GetDataGridCell(DataGrid datagrid, int rowIndex, int columnIndex)         {             try             {                 DataGridRow rowContainer = GetDataGridRow(datagrid, rowIndex);                                 if (rowContainer != null)                 {                     DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);

                    这行代码是通过行得到单元格


 

                    DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);

                    这行代码是通过index得到具体的单元格


                    if (cell == null)                     {                         datagrid.ScrollIntoView(rowContainer, datagrid.Columns[columnIndex]);                         cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);                     }
                    return cell;                 }             }             catch             {                 return null;             }             return new DataGridCell();         }
        public static DataGridRow GetDataGridRow(DataGrid datagrid, int rowIndex)         {            DataGridRow row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);

 

 

            这行代码的作用是得到datagrid的一行

 


            if (row == null)             {                 datagrid.UpdateLayout();                 //datagrid.ScrollIntoView(datagrid.Items[rowIndex]);                 row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);             }             return row;         }
        public static T GetVisualChild<T>(Visual parent) where T : Visual         {             T childContent = default(T);             int numVisuals = VisualTreeHelper.GetChildrenCount(parent);             for (int i = 0; i < numVisuals; i++)             {                 Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);                 childContent = v as T;                 if (childContent == null)                 {                     childContent = GetVisualChild<T>(v);                 }                 if (childContent != null)                 {                     break;                 }             }             return childContent;         }

posted @ 2013-01-17 18:31  chasecnblogs  阅读(2309)  评论(0编辑  收藏  举报