我是WPF的新手,我在WPF中使用MVVM模式並在運行時生成Datatable結構,然後將Datatable與DataGrid/RadGridView綁定,該數據表按預期工作。在WPF和MVVM中綁定帶DataGrid的數據表
問題:我想要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");
}
}
爲了創建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"/>
數據表是按預期創建(來自LoadManualDataTable方法),如果我將通過代碼添加任何行,那麼這些行將被綁定並顯示在DataGrid中。但我無法通過DataGrid創建或刪除行。
任何幫助將不勝感激。
在此先感謝!
CanUserAddRows也應該是真實的。 – blindmeis 2012-02-15 07:01:55
我很抱歉沒有把它放在我原來的文章中,但CanUserAddRows也是「真」。 – user178854 2012-02-15 20:05:45