我是WPF的新手,我在WPF中使用MVVM模式并在运行时生成Datatable结构,然后将Datatable与DataGrid/RadGridView绑定,这是预期的。
问题:我想DataGrid/RadGridView可配置(用户可以添加新行,删除行和编辑数据),并在保存按钮点击一切都应该保存在数据库中。我有一个情况,我需要创建一个空的DataTable与不同的列(取决于用户输入)。然后在这些列下输入值,然后点击“保存”将需要的值保存到数据库中。我可以将DataTable绑定到DataGrid(如果网格中的DataTable中已经有一些数据,我可以看到所有的列名和数据行),但不能在运行时从DataGrid添加(输入)或删除任何行。我已经为CanUserDeletetetable和CanUserInsertable设置了“True”值。我不知道我错在哪里。我在ViewModel类中实现了INotifyPropertyChanged。
我正在努力获得想要的结果。
我的代码如下所示:
ViewModel--
DataTable _manualDataTable;
public DataTable ManualDataTable
{
get
{
return _manualDataTable;
}
set
{
_manualDataTable = value;
OnPropertyChanged("ManualDataTable");
}
}
对于创建DataTable--
void LoadManualDataTable()
{
DataTable dtData = new DataTable();
dtData.Columns.Add("TimeStamp", typeof(DateTime));
List<DataColumn> columns = new List<DataColumn>();
var query = _dataContext.GetSenData().Where(sen => sen.LogID == ((DataLogs)SelectedItemNode).Logger.LogID).Select(sen => sen.SeriesID);
var queryTS = _dataContext.GetDataSeries().Where(ts => query.Contains(ts.SeriesID));
foreach (DataSeries ts in queryTS)
{
var queryPLoc = _dataContext.GetDataLoc().Where(pLoc => pLoc.ParamID == ts.ParamID).Select(pLoc => pLoc.Name);
dtData.Columns.Add(queryPLoc.First(), typeof(string));
}
ManualDataTable = dtData;
}
XAML代码
<DataGrid Grid.Row="0" AutoGenerateColumns="True" ItemsSource="{Binding ManualDataTable}" CanUserAddRows="True" CanUserDeleteRows="True" IsReadOnly="False" Name="dataGridManualData"/>
DataTable按照预期创建(从LoadManualDataTable方法),如果我通过代码添加任何行,那么这些行将被绑定并显示在DataGrid中。但是我不能通过DataGrid创建或删除行。
任何帮助将不胜感激。
提前感谢!
2条答案
按热度按时间csbfibhn1#
我创建了一个简单的测试项目来获得你所得到的,但它的工作没有任何问题。也许你应该张贴你的代码,并说明什么不工作。
XAML
b4lqfgs42#
我不确定我的答案,但我会试试...
我也有同样的问题:CanUserAdd始终为false。
原来绑定是好的,但我被bindig的类没有默认的构造函数。
本作品:
这不起作用: