按钮点击更新wpf datagrid

时间:2013-11-04 16:30:29

标签: c# wpf xaml datagrid

我是C#的新手,我正在努力解决一些非常基本的问题。我找到的使用数据网格的例子比较复杂,我只想要一个列表,只需按一下按钮就可以“勾选”并添加时间戳。关于如何最好地做到这一点的任何想法?目前我有以下哪些显然不起作用。

C#

    public class ListData
    {
        public int Number { get; set; }
        public string Signature { get; set; }
    }

    List<ListData> LoadListData()
    {
        List<ListData> TableInfo = new List<ListData>();
        TableInfo.Add(new ListData()
        {
            Number = 1,
        });
        TableInfo.Add(new ListData()
        {
            Number = 2,
        });
        TableInfo.Add(new ListData()
        {
            Number = 3,
        });
        return TableInfo;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        DataGrid1.ItemsSource = LoadListData();
    }

    private void NextRow_Click(object sender, RoutedEventArgs e)
    {
        //update row i here
        //add Signature =  "J Doe " + DateTime.Now,
        // i++
    }

XAML

    <DataGrid Height="200" HorizontalAlignment="Right" Name="DataGrid1" VerticalAlignment="Top" Width="400" />

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是向DateTime类添加Timestamp属性(类型为ListData)。单击按钮后,您必须遍历现有集合并添加时间戳值,如下所示:

var myList = LoadListData();

foreach(var item in myList)
{
   item.Timestamp = DateTime.Now;
}

在循环结束时,你必须做这样的事情:

DataGrid1.ItemsSource = myList;
DataGrid1.Items.Refresh(); //to refresh the rows in the DataGrid

更好的解决方案是使用ObservableCollection项,并使用此伪代码在ListData类中实现接口INotifyPropertyChanged

    public class ListData : INotifyPropertyChanged
    {

    public event PropertyChangedEventHandler PropertyChanged;
    private int _number;

    public int Number 
    { 
    get
    {
      return _number;
    } 
    set
    {
       if(value!= null)
    {
      _number = value;
      OnPropertyChanged("Number");
    }
    }

private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        } 
}


    public ObservableCollection<ListData> MyList {get;set;}

通过这种方式,您只需修改集合中每个项目的Timestamp属性,而无需手动更新DataGrid。

有关ObservableCollection here的更多信息。

答案 1 :(得分:0)

这对你有用

      var _row = (ListData)DataGrid1.SelectedItem;

        if (_row != null)
        {
            _row.Signature = "Signed";
            DataGrid1.Items.Refresh();
        }