gpt4 book ai didi

c# - 在 WPF 和 MVVM 中使用 DataGrid 绑定(bind)数据表

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:03 26 4
gpt4 key购买 nike

我是 WPF 新手,我在 WPF 中使用 MVVM 模式并在运行时生成数据表结构,然后将数据表与 DataGrid/RadGridView 绑定(bind),这按预期工作。

问题:我希望 DataGrid/RadGridView 可配置(用户可以在其中添加新行、删除行和编辑数据)并在单击保存按钮时应将所有内容保存在数据库中。我有一种情况需要创建一个包含不同列的空数据表(取决于用户输入)。然后在这些列下输入值,然后单击保存需要将值保存在数据库中。我能够将 DataTable 绑定(bind)到 DataGrid(如果网格中的 DataTable 中已经有一些数据,我可以看到所有列名和数据行)但无法在运行时从 DataGrid 添加(输入)或删除任何行.我已经为 CanUserDeleteRows 和 CanUserInsertRows 设置了“True”值。我不确定我哪里出错了。我在我的 ViewModel 类中实现了 INotifyPropertyChanged。

我正在努力获得想要的结果。

我的代码如下所示:

View 模型--

    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 方法),如果我将通过代码添加任何行,那么这些行将被绑定(bind)并显示在 DataGrid 中。但是我无法通过 DataGrid 创建或删除行。

我们将不胜感激任何帮助。

提前致谢!

最佳答案

我创建了一个简单 测试项目来得到你得到的东西,但它的工作没有任何问题。也许你应该发布你的代码并说明什么不起作用。

public partial class MainWindow : Window
{
public DataTable MyTable { get; set; }

public MainWindow()
{
InitializeComponent();

this.MyTable= new DataTable();
this.MyTable.Columns.Add("Test");
var row1 = this.MyTable.NewRow();
row1["Test"] = "dsjfks";

this.MyTable.Rows.Add(row1);

this.DataContext = this;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("rows: " + this.MyTable.Rows.Count);
}

}

xaml

<DockPanel>
<Button Height="23" Content="sdf" Click="Button_Click" />
<DataGrid ItemsSource="{Binding MyTable}" CanUserAddRows="True"/>
</DockPanel>

关于c# - 在 WPF 和 MVVM 中使用 DataGrid 绑定(bind)数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com