我是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" />
答案 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();
}