none
请教如何让DataGrid只有一行可以编辑 RRS feed

  • 问题

  • 我希望能达到DataGrid上方有一个“修改”按钮,点击该按钮当前选中行就可以编辑,其他行还是只读的。不知道用DataGrid怎么实现。

    用DataGridTextColumn的CellTemplate中的DataTrigger绑定某属性不行。如果用DataTemplate又不知道如何处理编辑模板和显示模板以确保达到想要的效果。

    2012年8月13日 6:12

答案

  • Hi xyzdumpling,

    有一点需要强调的是DataGrid是做不到一行所有的Cell在同时进入编辑状态的, 只能是一个Cell在编辑状态。我这里写了一个例子,是给DataGrid一个Button column, 点击按钮,当前行的第一个Cell进入编辑模式。

           <DataGridTemplateColumn Width="50">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Name="btn" Click="btn_Click"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
      private void btn_Click(object sender, RoutedEventArgs e)
            {
                Button btn = sender as Button;
                DataGridRow dgr = datagrid.ItemContainerGenerator.ContainerFromItem(btn.DataContext)as DataGridRow;
                if (dgr != null)
                {
                    DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(dgr);
                    DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(0);
                    cell.IsEditing = true;
                }
            }
            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);
                    else
                        break;
                }
    
                return child;
            }



    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月14日 5:44
    版主