none
Как работает добавление новых строк в DataGrid? RRS feed

  • Вопрос

  • DataGrid привязан к ObservableCollection, которая на данный момент пустая.

    При этом в нём нет "новой строки", в GUI у меня только заголовки таблицы, и нет возможности добавить строку.

    Почему это так и что с этим сделать?

    В приложенном скрине DataGrid вложенный и состоит из одной колонки "Файл"


    17 декабря 2012 г. 7:29

Ответы

  • Проблема решается, если инициализировать элементы коллекции значениями "" по умолчанию.

    Но механизм все еще непонятен

    public class StringValue : INotifyPropertyChanged
    {
    	string _value;
    	public string Value
    	{
    		get { return _value; }
    		set { _value = value; OnPropertyChanged(() => Value); }
    	}
    	public StringValue(string value)
    	{
    		this.Value = value;
    	}
    	public StringValue() :this("") {}
    	// INotifyPropertyChanged Members
    }

    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:57
    17 декабря 2012 г. 7:42
  • Привет.

    Как у вас сделана разметка, автогенерация столбцов включена или нет? И соответственно как происходит привязка - через ItemsSource или DataContext? Также проверьте что ваш Item, который задается при создании коллекции содержит конструктор по-умолчанию.

    Вот этот код работает и генерирует строку для ввода сразу:

    <Window x:Class="WpfApplication4.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <DataGrid Name="dataGrid1" AutoGenerateColumns="True" HorizontalAlignment="Left" Margin="48,46,0,0" VerticalAlignment="Top" Height="150" Width="288"/>
            <Button Content="Button" HorizontalAlignment="Left" Margin="400,70,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
        </Grid>
    </Window>

    using System.Collections.ObjectModel;
    using System.Windows;
    namespace WpfApplication4
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                dataGrid1.ItemsSource = new ObservableCollection<MyItem>();
            }
        }
        public class MyItem
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    }


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:57
    18 декабря 2012 г. 10:45

Все ответы

  • Проблема решается, если инициализировать элементы коллекции значениями "" по умолчанию.

    Но механизм все еще непонятен

    public class StringValue : INotifyPropertyChanged
    {
    	string _value;
    	public string Value
    	{
    		get { return _value; }
    		set { _value = value; OnPropertyChanged(() => Value); }
    	}
    	public StringValue(string value)
    	{
    		this.Value = value;
    	}
    	public StringValue() :this("") {}
    	// INotifyPropertyChanged Members
    }

    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:57
    17 декабря 2012 г. 7:42
  • Привет.

    Как у вас сделана разметка, автогенерация столбцов включена или нет? И соответственно как происходит привязка - через ItemsSource или DataContext? Также проверьте что ваш Item, который задается при создании коллекции содержит конструктор по-умолчанию.

    Вот этот код работает и генерирует строку для ввода сразу:

    <Window x:Class="WpfApplication4.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <DataGrid Name="dataGrid1" AutoGenerateColumns="True" HorizontalAlignment="Left" Margin="48,46,0,0" VerticalAlignment="Top" Height="150" Width="288"/>
            <Button Content="Button" HorizontalAlignment="Left" Margin="400,70,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
        </Grid>
    </Window>

    using System.Collections.ObjectModel;
    using System.Windows;
    namespace WpfApplication4
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                dataGrid1.ItemsSource = new ObservableCollection<MyItem>();
            }
        }
        public class MyItem
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    }


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:57
    18 декабря 2012 г. 10:45