简体   繁体   English

C# WPF DataGrid 获取行

[英]C# WPF DataGrid get row

I have a C# WPF project and I use a DataGrid (not DataGridView)我有一个 C# WPF 项目,我使用 DataGrid(不是 DataGridView)

I need to get a row from the DataGrid using我需要使用从 DataGrid 中获取一行

myGrid.ItemContainerGenerator.ContainerFromItem

My problem is that the result is always null - even though there are rows(items) and columns in the grid.我的问题是结果始终为空 - 即使网格中有行(项目)和列。

Here is what I can see in Debugger output:这是我在调试器输出中可以看到的内容:

myGrid.Items.Count
16

myGrid.Items[0]
{Certificate.Gasbottle}
    BottleNr: "******"
    BottleNrVariable: "$BottlenumberCO2CH4H2S"
    Gasname: "CO2/CH4/H2S"
    
myGrid.Items[1]
{Certificate.Gasbottle}
    BottleNr: "75436"
    BottleNrVariable: "$BottlenumberCO"
    Gasname: " CO"

Problem:    
(DataGridRow)myGrid.ItemContainerGenerator.ContainerFromItem(myGrid.Items[1]);
null      <--- why null? myGrid.Items[1] does exist... (I also get this for all other items)

I also get null if I use FromIndex instead of FromItem:如果我使用 FromIndex 而不是 FromItem,我也会得到 null:

DataGridRow row  = myGrid.ItemContainerGenerator.ContainerFromIndex(1)

You can get the rows as follows:您可以按如下方式获取行:

var itemsSource = myGrid.ItemsSource as IEnumerable;
    
if (itemsSource != null)
{
   foreach (var item in itemsSource)
   {
       DataGridRow row = myGrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
    
   }
}

To get a specific row,要获取特定行,

var itemsSource = dataGrid.ItemsSource as IList;
    
if (itemsSource != null && itemsSource.Count > 1)
{
   var item = itemsSource[1];
   DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM