gpt4 book ai didi

c# - ListView与DataTable绑定(bind),删除行后不更新

转载 作者:太空狗 更新时间:2023-10-29 21:58:34 24 4
gpt4 key购买 nike

所以基础知识:我有一个带有 ListView 的窗口,它由我的网格的数据上下文填充:

mainGrid.SetBinding(Grid.DataContextProperty, 
new Binding() {
Source = new DataView()
{ Table = SQLHandler.GetHandler[classType.ToString()] }
}
);

在 xaml 中:

<ListView Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" ItemsSource="{Binding}">

一切正常,已填充。正如您在上面看到的,我有一个 SQLHandler 类,它可以由 Singleton 访问,并且我可以使用索引器访问我的表。

问题:窗口加载,我选择一行,单击“编辑”按钮,新窗口加载,我在其中获取所选行的详细信息。当我通过这个新窗口删除这一行并关闭它时,主窗口(显示完整数据表的地方)不会相应更新。我知道解决方案应该是什么,但我无法让它发挥作用。 (inotifyproperty 将接口(interface)更改为 SqlHandler 类、Binding.IndexerName 等。)

这里是主要的事情:数据集不在我的 SqlHandler 类中,它在 SqlExecuter 中,我所有的 sqlcommands 都在这里执行。

public override DataTable this[string key]
{
get
{
if (sqlExecuter.GetDataSet.Tables.Contains(key))
return sqlExecuter.GetDataSet.Tables[key];
throw new KeyNotFoundException("The specified key was not found");
}
}

GetDataSet 在哪里:

public DataSet GetDataSet
{
get { return ds; }
}

我怎样才能使这项工作?当我在另一个窗口中删除一行并关闭该行时,主窗口的 ListView 不会自行更新。我唯一的选择是打开一个刷新按钮,然后重新绑定(bind) datacontext 属性,当然它可以正常工作,但我的目标是拥有一个“实时”更新系统,毕竟这就是绑定(bind)的目的。

我尝试过的:SqlExecuter 中的 GetDataSet:实现了 inotifypropertychanged 接口(interface),但没有任何改变。而且我不能在 SqlHandler 的索引器上实现 inotifypropertychanged,因为它没有 setter ,我总是只是从代码隐藏访问表,我的 sqldataadapter 正在填充它们(Fill 方法)

p.s: 我真的不打算创建一个 ObservableCollection,因为我 90% 的代码应该被重写,当我删除一行时,我会清除我的数据集并再次填充它,所以我什至没想到它注意到每一个变化,就在我重新填充我的数据表时,我的 ListView 应该知道它......并自行刷新

最佳答案

我认为使用第二个窗口作为弹出窗口可能是这里的问题所在。如果您在同一页面上进行编辑,那么您可以使用简单的

ListView1.DataBind()

在删除命令结束时刷新列表的内容。或者,如果页面被重绘而不是重新加载,您可以使用 IsPostBack 方法更新列表。

您可以尝试调用页面名称,然后从另一个窗口调用 ListView ,但我不确定您是否可以从另一个窗口执行此类命令。

或者,您可以在不同的页面而不是单独的窗口中进行编辑,这样当您返回原始页面时, ListView 将被重绘。

和你一样,我确信你的问题有更简单的解决方案,但不幸的是我不知道。

关于c# - ListView与DataTable绑定(bind),删除行后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14042904/

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