Как добавить новую строку в сетку данных (WPF toolkit) при нажатии на кнопку снаружи сетки данных - PullRequest
0 голосов
/ 27 февраля 2010

Я хочу добавить новую строку в сетку данных при нажатии на кнопку снаружи сетки данных. Сетка данных связана с базой данных SQL Server и содержит некоторые данные во время выполнения Я хочу добавить новые данные в базу данных через базу данных

Я много пробовал, но безуспешно

Кто-нибудь ответит мне, это будет очень полезно для меня ...

Заранее спасибо ..

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Если коллекция данных, привязанных к сетке, реализует INotifyCollectionChanged, добавление нового элемента в коллекцию добавит строку в сетку данных.

Когда вы читаете данные из БД, сохраните их в ObservableCollection (которая реализует этот интерфейс), а затем привяжите данные к сетке.

Пример:

public class ViewModel {

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

   ...

}

В View.xaml:

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

И вы должны установить свойство DataContext представления для экземпляра ViewModel.

С этого момента добавление / удаление элементов из наблюдаемой коллекции автоматически запускает ту же операцию в сетке данных.

0 голосов
/ 11 марта 2013

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; }
}
...