C# WPF&x2B;获取datagridview的值

C# WPF&x2B;获取datagridview的值,c#,wpf,datagridview,C#,Wpf,Datagridview,以下是我的wpf xml datagridview: <DataTemplate x:Key="CustomLimitationTemplate"> <StackPanel> <ComboBox> <ComboBoxItem>Aucune</ComboBoxItem> <ComboBoxItem>Légère</ComboBoxItem>

以下是我的wpf xml datagridview:

<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>

不能使用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>
现在,将以下代码添加到组合框的加载事件中

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;
        }
最后,将以下代码添加到datagrid selected changed事件

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);
            }
        }
在这里,我使用messagebox进行显示。您可以按照自己的方式处理输出


希望此答案对您有所帮助。

您遇到的运行时错误是什么?严重性代码描述项目文件行错误CS1061“DataGrid”不包含“SelectedRows”的定义,并且找不到接受“DataGrid”类型第一个参数的扩展方法“SelectedRows”(是否缺少using指令或程序集引用?)错误CS1503参数1:无法从'System.Windows.Controls.DataGridTextColumn'转换为'int'错误CS1503参数1:无法从'System.Windows.Controls.DataGridTemplateColumn'转换为'int'因此存在编译时异常?您好,谢谢您的回答。帮助不大是的,但我不知道如何通过数据网格上的for获取所有行?@希望下面的链接能帮助你
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);
            }
        }