【发布时间】:2012-03-06 05:49:00
【问题描述】:
我是 WPF 新手,我在 WPF 中使用 MVVM 模式并在运行时生成一个 Datatable 结构,然后将 Datatable 与 DataGrid/RadGridView 绑定,它按预期工作。
问题:我希望 DataGrid/RadGridView 可配置(用户可以在其中添加新行、删除行和编辑数据),然后单击保存按钮,所有内容都应保存在数据库中。我有一种情况,我需要创建一个具有不同列的空 DataTable(取决于用户输入)。然后在这些列下输入值,然后单击保存需要将值保存在数据库中。我能够将 DataTable 绑定到 DataGrid(如果网格中的 DataTable 中已经有一些数据,我可以看到所有列名和数据行)但无法在运行时从 DataGrid 添加(输入)或删除任何行.我为 CanUserDeleteRows 和 CanUserInsertRows 设置了“True”值。我不确定我哪里出错了。我在 ViewModel 类中实现 INotifyPropertyChanged。
我正在努力获得想要的结果。
我的代码如下所示:
ViewModel--
DataTable _manualDataTable;
public DataTable ManualDataTable
{
get
{
return _manualDataTable;
}
set
{
_manualDataTable = value;
OnPropertyChanged("ManualDataTable");
}
}
用于创建数据表--
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 创建或删除行。
我们将不胜感激。
提前致谢!
【问题讨论】:
-
CanUserAddRows 也应该为真。
-
很抱歉没有把它放在我原来的帖子里,但 CanUserAddRows 也是“真”。