【问题标题】:Unable to retrieve the checked rows from datagrid无法从数据网格中检索选中的行
【发布时间】:2023-03-09 06:08:01
【问题描述】:

我正在尝试使用 WPF 创建一个简单的 Datagrid,这样每一行都有一个复选框。我在检索数据时遇到了困难。我只得到 1 个结果。我可以在下面的 XAML 中修复什么

 <DataGrid x:Name="details" x:Uid="MyDataGrid" AutoGenerateColumns="False" AlternationCount="1" SelectionMode="Single" IsReadOnly="True" HeadersVisibility="Column" Margin="0,0,10,2" HorizontalAlignment="Right" Width="410" Grid.Column="1" Grid.Row="1" >
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.Header>
                        <CheckBox Content=" Select All" x:Name="headerCheckBox" />
                    </DataGridTemplateColumn.Header>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox Name="chkDiscontinue"  IsChecked="{Binding Path=IsChecked,ElementName=headerCheckBox,Mode=OneWay}"   Margin="45 2 0 0"  />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Binding="{Binding Path=file_name}" Header="File Name" Width="2*" IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=file_path}" Header="File Path" Width="0.9*"/>
           </DataGrid.Columns> </DataGrid>

这就是我试图检索的方式:

$inputXML = $inputXML -replace 'mc:Ignorable="d"','' -replace "x:N",'N'  -replace '^<Win.*', '<Window'

[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = $inputXML
#Read XAML

    $reader=(New-Object System.Xml.XmlNodeReader $xaml)
  try{$Form=[Windows.Markup.XamlReader]::Load( $reader )}
    catch{Write-Host "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed."}

#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================

#$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "var_$($_.Name)" -Value $Form.FindName($_.Name) -Scope Global  }
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "var_$($_.Name)" -Value $Form.FindName($_.Name) }




$var_search_button.Add_Click({

    #JUST TO DISPLAY SOME RANDOM DATA(IT WORKS)
    $t = Import-Csv .\imp.csv
    $t | Select @{name = "file_name"; ex={$_.id}},@{name = "file_path"; ex={$_.name}} |% {$var_details.AddChild($_)}

    #TRYING TO RETRIVE THE ROWS WHICH I CHECK IN UI
    echo "__Show FORM DATA" | Out-File "imp.txt"
    $var_details.SelectedCells | Out-File "imp.txt" -Append
     $var_details.SelectedItems | Out-File "imp.txt" -Append
})


$Form.ShowDialog() | out-null

#-------------------------------------

【问题讨论】:

  • 您是如何尝试获取这些值的?向我们展示您的代码,而不仅仅是 xaml。这似乎很好,所以这是你的代码。
  • 先生,我也更新了代码。请检查

标签: wpf visual-studio powershell xaml user-interface


【解决方案1】:

我不习惯使用 PowerShell,但是...谈到 XAML,将“IsChecked”属性设置为“True”与被选中是不一样的。

您应该将您的行设置为在每次检查时被选中。

 $var_details.SelectedCells | Out-File "imp.txt" -Append
 $var_details.SelectedItems | Out-File "imp.txt" -Append

您正在询问 SelectedCells/SelectedItems 并且当您检查时您没有它们被选中。

我希望我自己解释一下:)

【讨论】:

  • 嗨胡安,你的意思是我必须设置某种事件来检查/取消选中?坦率地说,我对我粘贴的 XAML 没有任何详细的了解,但我只是想让它以某种方式工作。如果我得到一个小提示,我将能够这样做
  • 是的,您应该在每次选中/取消选中 DataGridTemplateColumn 时将选中/取消选中的行设置为选中/取消选中
  • 先生,如果您能建议我如何从 XAML 中实现它,那将是一个很大的帮助。我不是在寻找熟食,但我尝试了很多东西,以至于我什至不确定还能尝试什么:) 是否可以从“this”XAML 调用 PowerShell 方法??
  • 看看这个帖子stackoverflow.com/questions/34232130/… :) 如果我的回答对你有帮助,记得点赞并检查它作为答案;D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2012-08-06
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
相关资源
最近更新 更多