如何在单击datagrid外部的按钮时向数据网格(WPF工具包)添加新行

时间:2010-02-27 11:24:34

标签: c# sql-server wpf .net-3.5

当我点击数据网格外部的按钮时,我想在数据网格中添加一个新行。 datagrid与SQL Server数据库绑定,并且在运行时有一些数据 我想通过数据库将新数据添加到数据库

我尝试了很多,但没有成功

任何人都回复我这对我很有帮助......

提前谢谢..

2 个答案:

答案 0 :(得分:2)

如果绑定到网格的数据集合实现了INotifyCollectionChanged,则向集合中添加新项目会将该行添加到数据网格。

当您从数据库中读取数据时,将其存储在ObservableCollection(实现此接口)中,然后将数据绑定到网格。

示例:

public class ViewModel {

   public ObservableCollection<Data> Items { get; set; }

   ...

}

在View.xaml中:

...
<DataGrid ItemsSource={Binding Path=Items}" ... />
...

您必须将视图的DataContext属性设置为ViewModel的实例。

从现在开始,在observable集合中添加/删除项目将自动触发数据网格上的相同操作。

答案 1 :(得分:0)

XAML:

<Window x:Class="NewItemEvent.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="341" Width="567"   xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit">
<Grid>
<my:DataGrid AutoGenerateColumns="False" Margin="0,0,0,29" Name="dataGrid1">
  <my:DataGrid.Columns>
    <my:DataGridTemplateColumn Header="Name" Width="150">
      <my:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding FirstName}" Margin="3 3 3 3"/>
            <TextBlock Text="{Binding LastName}" Margin="3 3 3 3"/>
          </StackPanel>
        </DataTemplate>
      </my:DataGridTemplateColumn.CellTemplate>
      <my:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <TextBox Text="{Binding FirstName}" Margin="3 3 3 3"/>
            <TextBox Text="{Binding LastName}" Margin="3 3 3 3"/>
          </StackPanel>
        </DataTemplate>
      </my:DataGridTemplateColumn.CellEditingTemplate>
    </my:DataGridTemplateColumn>
    <my:DataGridTextColumn Header="Age" Binding="{Binding Age}" Width="100"/>
  </my:DataGrid.Columns>
</my:DataGrid>
<Button Height="23" HorizontalAlignment="Left" Name="AddNewRow" Click="AddNewRow_Click" VerticalAlignment="Bottom" Width="75">New Row</Button>

    

代码:

/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
   ObservableCollection<Person> People = new ObservableCollection<Person>();
   public Window1()
   {
       InitializeComponent();
       dataGrid1.ItemsSource = People;
   }

   private void AddNewRow_Click(object sender, RoutedEventArgs e)
   {
      People.Add(new Person() { FirstName = "Tom", LastName = "Smith", Age = 20 });
   }
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}