Wpf 数据网格模板编辑

Wpf 数据网格模板编辑,wpf,templates,datagrid,Wpf,Templates,Datagrid,我已经用combobox创建了datagrid(从DB读取数据),但是需要解决一些问题,也许你们中的某个人可以帮助我;) <DataGrid.Columns> <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}" ></DataGridTextColumn>--> <DataGridTemplateColumn He

我已经用combobox创建了datagrid(从DB读取数据),但是需要解决一些问题,也许你们中的某个人可以帮助我;)

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>
首先,我在dataGrid中使用了分组(按名称Wzór#分组),每次我想添加新元素时,它都会在底部显示: [^] 是否有可能仅使用此(新组)项创建类似“新组”的内容?例如: Wzór 1 Wzór1尼比斯基22 1 Wzór1捷克23 1 Wzór 2 Wzór 2 czarny 55 1 添加新项目 ComboBox ComBox ComboBox TextBox TextBox(与图片中标记的完全相同)。我的意思是这样想: [^]

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>
我发现的第二个问题是,当我添加新项目,并更改combobox 1、2或3中的任何内容,然后当我开始编辑任何文本框时,combobox中的所有值都会消失-有没有办法修复它

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>
这是源代码(实际上并不复杂,我从数据库中有3种方法,分别是fill combobox1、combobox2和combobox3,然后在单击按钮后,我创建了新的产品项,并将其添加到列表中):

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>
wzoryCount=wzoryCB.Items.Count;
List Produkty=新列表();
//对于(int i=0;i
我想,我需要在datagrid的beginEdit方法中做一些事情,但当我把messagebox放在那里时,它不会在我更改combobox中的任何内容时出现,而是在我更改textbox时出现

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>

谢谢你的帮助

首先,您需要的是ObservableCollection,而不是List。
    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>
其次,您可以在xaml中执行此操作:

<DataGrid ItemsSource="{Binding Produkty}">
    <DataGrid.Columns>

        <DataGridTemplateColumn Header="wzor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding wzor}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding kolor}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="cena">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding cena}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding rozmiar}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="indeks">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding indeks}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="kod">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding kod}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>
</DataGrid>
    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>

评论太长,所以我会在这里发布。这是我在xaml中使用的代码,所以我想你的answed不起作用

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>

    <DataGrid.Columns>

        <!--<DataGridTextColumn Header="Wzór" Binding="{Binding Path=wzor}"  ></DataGridTextColumn>-->

        <DataGridTemplateColumn Header="Wzór">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource wzoryList}" SelectedItem="{Binding wzor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>



        <DataGridTemplateColumn Header="Kolor">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource koloryList}" SelectedItem="{Binding kolor}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Rozmiar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{StaticResource rozmiarList}" SelectedItem="{Binding rozmiar}"></ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>


        <DataGridTextColumn Header="Indeks" Binding="{Binding Path=indeks}" ></DataGridTextColumn>
        <DataGridTextColumn Header="Kod" Binding="{Binding Path=kod}"></DataGridTextColumn>
        <DataGridTextColumn Header="Cena" Binding="{Binding Path=cena}" ></DataGridTextColumn>

好的,我会尝试收集,但不幸的是第二个对我不起作用。我以前就有过这样的代码: