WPF+获取datagridview的值

本文关键字:的值 datagridview 获取 WPF+ | 更新日期: 2023-09-27 18:20:29

这是我的wpf-xml数据网格视图:

<DataTemplate x:Key="CustomLimitationTemplate">
    <StackPanel>
        <ComboBox>
            <ComboBoxItem>Aucune</ComboBoxItem>
            <ComboBoxItem>Légère</ComboBoxItem>
            <ComboBoxItem>Modérée</ComboBoxItem>
            <ComboBoxItem>Forte</ComboBoxItem>
            <ComboBoxItem>Totale</ComboBoxItem>
        </ComboBox>
    </StackPanel>
</DataTemplate>
<DataGrid AutoGenerateColumns="False" VerticalAlignment="Stretch" Grid.Row="2" Name="dg1" RowDetailsVisibilityMode="Collapsed" ItemsSource="{Binding Source={StaticResource XmlData},XPath=Limits/*}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" x:Name="IdColumn" Binding="{Binding XPath=Id}" />
        <DataGridTemplateColumn Header="Capacite" CellTemplate="{StaticResource CustomCapacityTemplate}" Width="480" />
        <DataGridTemplateColumn Header="Limitation" x:Name="LimitationColumn" CellTemplate="{StaticResource CustomLimitationTemplate}" Width="150" />
        <DataGridTemplateColumn Header="Aide" CellTemplate="{StaticResource CustomDetailTemplate}" Width="97" />
    </DataGrid.Columns>
</DataGrid>

我想获得所有的第一个(ID)和第三个(Limit,DataTemplate Combobox)值,但我所有的foreach和for循环都失败了。示例:

foreach (DataRow row in dg1.SelectedRows)
{
    var id = row[IdColumn].ToString();
    var limitations = row[LimitationColumn].ToString();
}

WPF+获取datagridview的值

您不能使用datarow访问wpf中的datagrid组合框值。您可以通过以下代码获得任意选定的列。

添加以下xaml视图

数据网格

<DataGrid x:Name="dgTest" HorizontalAlignment="Left" AutoGenerateColumns="False" Margin="37,152,0,0" VerticalAlignment="Top" Height="126" Width="440" ItemsSource="{Binding XPath=data/Limits}" SelectionChanged="dgTest_SelectionChanged">
            <DataGrid.Resources>
                <DataTemplate x:Key="CustomDetailTemplate">
                    <StackPanel>
                        <ComboBox SelectionChanged="ComboBox_SelectionChanged_1" Loaded="ComboBox_Loaded_2" >
                            <ComboBoxItem>Aucune</ComboBoxItem>
                            <ComboBoxItem>Légère</ComboBoxItem>
                            <ComboBoxItem>Modérée</ComboBoxItem>
                            <ComboBoxItem>Forte</ComboBoxItem>
                            <ComboBoxItem>Totale</ComboBoxItem>
                        </ComboBox>
                    </StackPanel>
                </DataTemplate>
                <DataTemplate x:Key="CustomLimitationTemplate">
                    <StackPanel>
                        <ComboBox SelectionChanged="ComboBox_SelectionChanged_2" Loaded="ComboBox_Loaded_1" > 
                            <ComboBoxItem>01</ComboBoxItem>
                            <ComboBoxItem>02</ComboBoxItem>
                            <ComboBoxItem>03</ComboBoxItem>
                            <ComboBoxItem>04</ComboBoxItem>
                            <ComboBoxItem>05</ComboBoxItem>
                        </ComboBox>
                    </StackPanel>
                </DataTemplate>
                <DataTemplate x:Key="CustomCapacityTemplate">
                    <StackPanel>
                        <ComboBox Loaded="ComboBox_Loaded_3" >
                            <ComboBoxItem>11</ComboBoxItem>
                            <ComboBoxItem>12</ComboBoxItem>
                            <ComboBoxItem>13</ComboBoxItem>
                            <ComboBoxItem>14</ComboBoxItem>
                            <ComboBoxItem>15</ComboBoxItem>
                        </ComboBox>
                    </StackPanel>
                </DataTemplate>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" x:Name="IdColumn" Binding="{Binding XPath=Id}" />
                <DataGridTemplateColumn Header="Capacite" CellTemplate="{StaticResource CustomCapacityTemplate}" Width="100" />
                <DataGridTemplateColumn Header="Limitation" x:Name="LimitationColumn" CellTemplate="{StaticResource CustomLimitationTemplate}" Width="150" />
                <DataGridTemplateColumn Header="Aide" CellTemplate="{StaticResource CustomDetailTemplate}" Width="97" />
            </DataGrid.Columns>
        </DataGrid>

xml定义

<Window.DataContext>
        <XmlDataProvider x:Name="TestData" Source="test.xml"/>
    </Window.DataContext>

现在,全局声明以下实例和变量。

ComboBox cmb02;
ComboBox cmb01;
ComboBox cmb03;
string cmb1, cmb2,cmb3;

现在,将以下代码添加到组合框的加载事件中

private void ComboBox_Loaded_1(object sender, RoutedEventArgs e)
        {
            cmb01 = (sender as ComboBox);
            cmb01.SelectedIndex = 0;
        }
        private void ComboBox_Loaded_2(object sender, RoutedEventArgs e)
        {
            cmb02 = (sender as ComboBox);
            cmb02.SelectedIndex = 0;
        }
        private void ComboBox_Loaded_3(object sender, RoutedEventArgs e)
        {
            cmb03 = (sender as ComboBox);
            cmb03.SelectedIndex = 0;
        }

最后将以下代码添加到数据网格选择的更改事件

private void dgTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cmb01 != null && cmb02 != null && cmb03 !=null)
            {
                cmb1 = cmb01.SelectionBoxItem.ToString();
                cmb2 = cmb02.SelectionBoxItem.ToString();
                cmb3 = cmb03.SelectionBoxItem.ToString();
                MessageBox.Show(cmb1 + cmb2+cmb3);
            }
        }

在这里,我使用消息框来显示目的。您可以按照自己想要的方式处理输出。

希望这个答案对你有帮助。