首页 > 技术文章 > wpf datagrid 中按钮 动态显示

sjqq 2018-02-19 22:06 原文

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

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

[csharp] view plain copy
 
  1. private void Dict_PrSCList_Load(object sender, RoutedEventArgs e)  
  2. {  
  3.     BingData();  
  4.     BingComplete();  
  5. }  



        //绑定数据

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



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

[csharp] view plain copy
 
    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.   
    7.              //获取行 并转换为DataGridRow  
    8.              var cntr = udgList.ItemContainerGenerator.ContainerFromIndex(i);  
    9.            
    10.              if (cntr == null)  
    11.              {  
    12.                  udgList.UpdateLayout();  
    13.                  //datagrid.ScrollIntoView(datagrid.Items[rowIndex]);  
    14.                  cntr = (DataGridRow)udgList.ItemContainerGenerator.ContainerFromIndex(i);  
    15.                  //cntr.IsSelected = true;  
    16.              }  
    17.              if (cntr == null) return;  
    18.              DataGridRow ObjROw = (DataGridRow)cntr;  
    19.              //定义列  
    20.              DataGridTemplateColumn templeColumn = udgList.Columns[0] as DataGridTemplateColumn;  
    21.   
    22.              if(templeColumn == null) return;  
    23.              //object item;  
    24.              //item = udgList.CurrentCell.Item;  
    25.              //item = udgList.Columns[0].GetCellContent(ObjROw);  
    26.             //FrameworkElement element = templeColumn.GetCellContent(item);  
    27.   
    28.              //获取单元格 通过列和行的交汇处 获取单元格  
    29.             FrameworkElement element = templeColumn.GetCellContent(ObjROw);  
    30.             if (element == null) return;  
    31.              //通过 Name获取该单元格下的button元素  
    32.             Button btnUpdateNum = templeColumn.CellTemplate.FindName("BTBJ", element) as Button;  
    33.              //设置其是否隐藏  
    34.             btnUpdateNum.Visibility = Visibility.Hidden;  
    35.          }  
    36.         }  

推荐阅读