wpf datagrid 中按钮 动态显示

时间:2023-03-09 16:14:30
wpf datagrid 中按钮 动态显示

/若datagrid出现滚动条可能会出现问题需要加上下面俩句话。
//因为出滚动条时,为了显示加速,datagrid会加载一部分数据。另一些数据当滚动时在加载进去 这样初始化获取不到这些数据。
//在datagrid上添加上以下俩句话可以避免预加载数据,使数据全部加载出来
EnableColumnVirtualization="False" EnableRowVirtualization="False"

// 页面加载,数据初始化

  1. private void Dict_PrSCList_Load(object sender, RoutedEventArgs e)
  2. {
  3. BingData();
  4. BingComplete();
  5. }

//绑定数据

  1. private void BingData()
  2. {
  3. DataTable dt;
  4. dt = MngDBFuncWPF.listPrSCName();
  5. lbCount.Content = "共找到 " + dt.Rows.Count + " 条符合条件的记录";
  6. udgList.ItemsSource = dt.DefaultView;
  7. }

//绑定数据后设置模板列中按钮显示和不显示

    1. private void BingComplete()
    2. {
    3. for (int i = 0; i < this.udgList.Items.Count; i++)
    4. {
    5. //int index = dataGrid.CurrentCell.Column.DisplayIndex;
    6. //获取行 并转换为DataGridRow
    7. var cntr = udgList.ItemContainerGenerator.ContainerFromIndex(i);
    8. if (cntr == null)
    9. {
    10. udgList.UpdateLayout();
    11. //datagrid.ScrollIntoView(datagrid.Items[rowIndex]);
    12. cntr = (DataGridRow)udgList.ItemContainerGenerator.ContainerFromIndex(i);
    13. //cntr.IsSelected = true;
    14. }
    15. if (cntr == null) return;
    16. DataGridRow ObjROw = (DataGridRow)cntr;
    17. //定义列
    18. DataGridTemplateColumn templeColumn = udgList.Columns[0] as DataGridTemplateColumn;
    19. if(templeColumn == null) return;
    20. //object item;
    21. //item = udgList.CurrentCell.Item;
    22. //item = udgList.Columns[0].GetCellContent(ObjROw);
    23. //FrameworkElement element = templeColumn.GetCellContent(item);
    24. //获取单元格 通过列和行的交汇处 获取单元格
    25. FrameworkElement element = templeColumn.GetCellContent(ObjROw);
    26. if (element == null) return;
    27. //通过 Name获取该单元格下的button元素
    28. Button btnUpdateNum = templeColumn.CellTemplate.FindName("BTBJ", element) as Button;
    29. //设置其是否隐藏
    30. btnUpdateNum.Visibility = Visibility.Hidden;
    31. }
    32. }