将空行添加到WPF DataGrid并随后编辑单元格

时间:2016-09-22 20:23:05

标签: c# wpf datagridview datagrid

我是WPF的新手并尝试将程序从WinForms转换为WPF。我遇到了一个打嗝,试图从DataGridView转换为DataGrid并添加行。任何帮助表示赞赏。

原始代码:

for (int i = 0; i < noteArray.Count; i++)
        {
            int newIndex = dtgrdNotes.Rows.Add();
            dtgrdNotes.Rows[newIndex].Cells[0].Value = noteArray[i].ToString();
            dtgrdNotes.Rows[newIndex].Cells[1].Value = chkbx1.Checked;
            dtgrdNotes.Rows[newIndex].Cells[2].Value = chkbx2.Checked;
        }

我需要在WPF中使用该代码,并且我已经尝试了 dtgrdNotes.Items 的不同变体,甚至是 DataRowView ,但到目前为止还没有任何工作。有什么建议吗?

更新* XAML与理查德的控件问题:

<DataGrid Name="dtgrdNotes" Height="178" Width="739" HorizontalAlignment="Right" VerticalAlignment="Bottom" Canvas.Left="1" IsEnabled="False" >
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="dgtxtbxNote" Width="*" Binding="{Binding note}"/>
        <DataGridCheckBoxColumn x:Name="dgchbxInquire" Width="100" Binding="{Binding inquire}" />
        <DataGridCheckBoxColumn x:Name="dgchbxPrint" Width="100" Binding="{Binding print}" />
        <DataGridTemplateColumn x:Name="dgbtncDelete" Width="80" Header="Button">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button x:Name="dgbtncDeleteButton" Content="Delete" Width="50px" Height="10px" FontWeight="Bold" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:0)

在WPF中,数据控件必须绑定到一组数据,通常是可观察的集合。 您可以尝试创建一个包含一个或多个空链接数据和控件的集合。 Datagrid必须与您使用的模型相同。 我会给你一个例子:

的Datagrid:

<DataGrid x:Name="dtgPersons" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Width="1*" Binding="{Binding Id}"/>
        <DataGridTextColumn Header="Name" Width="2*" Binding="{Binding Name}"/>
        <DataGridTextColumn Header="Last Name" Width="2.5*" Binding="{Binding LastName}"/>
        <DataGridTextColumn Header="Age" Width="1*" Binding="{Binding Age}"/>
        <DataGridCheckBoxColumn Width="*" Binding="{Binding Status}" Header="Status"/>
        <DataGridTemplateColumn Width="*" Header="Action">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Delete" Click="Button_Click"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

型号:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public bool Status { get; set; }
}

代码:

public MainWindow()
{
    InitializeComponent();

    ObservableCollection<Person> Persons = new ObservableCollection<Person>();

    for(int i = 0; i < 10; i++)
    {
        Person p = new Person();
        p.Id = i;
        p.Age = i + 10;
        p.Name = "Name " + i;
        p.LastName = "LastName " + i;
        p.Status = true;

        Persons.Add(p);
    }

    dtgPersons.ItemsSource = Persons;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    var person = dtgPersons.SelectedItem as Person;
    MessageBox.Show(person.Name + " will be removed");
}

结果:

enter image description here

enter image description here