gpt4 book ai didi

c# - 如何将 Linq2SQL 集合数据绑定(bind)到 winform 文本字段

转载 作者:太空狗 更新时间:2023-10-30 01:28:21 26 4
gpt4 key购买 nike

对于如何通过使用 DataBindings 来优化我的程序,我有点困惑。我的程序使用多个 Linq2SQL 绑定(bind)对象来存储数据。所有 ORM 对象都存储在层次结构中。在第二个 GUI 项目中,我在一些文本和组合框字段中显示此数据。

数据结构层次如下:

  • JobManager 包含 Jobs
  • 的字典
  • 每个 Job 都包含一个 Jobitems
  • 的字典
  • 每个 Jobitem 只包含一个 Article

JobJobitemArticle 都是 Linq2SQL 对象,代表一个 ORM。

现在我有一个带有 2 个 ListView 和一个选项卡 Pane 的 GUI。选项卡 Pane 显示工作、工作项目和文章的属性,并提供修改工作和工作项目的可能性。 GUI 应该像这样:

  1. 当在第一个 ListView 中选择一个 Job 时,相关的 jobitems 将显示在第二个 ListView 中,并且有关该作业的详细信息显示在选项卡 Pane 中。
  2. 当在第二个 ListView 中选择一个 Jobitem 时,jobitem 详细信息和文章详细信息将显示在选项卡 Pane 中,但只有 Jobitem 信息是可编辑的。
  3. 完成更改后,用户必须有意保存它们。否则更改应该被丢弃并且不会同步到数据库。

如何使用 DataBinding 实现此行为?

特别是,我可以将一个完整的集合绑定(bind)到单个 TextField 一次,然后根据 ListViews 中的选择移动其位置吗?或者我是否必须针对用户执行的每个选择在每个作业的基础上添加和删除单个 DataBinding?

最佳答案

您真的是指“词典”吗? Winform 绑定(bind)适用于列表 (IList/IListSource),但不适用于字典。此外,ListView 不像其他一些控件那样易于绑定(bind)。

除此之外,它应该纯粹使用映射名称来工作 - 我会尝试做一个简单的例子......


使用 Northwind 的基本示例进行编辑;请注意,理想情况下,数据上下文不应长期存在;您可能还想查看存储库实现之类的东西而不是直接绑定(bind):

using System;
using System.Windows.Forms;
using SomeNamespaceWithMyDataContext;
static class Program
{
[STAThread]
static void Main() {
MyDataContext ctx = new MyDataContext();
BindingSource custs = new BindingSource() {
DataSource = ctx.Customers};

BindingSource orders = new BindingSource {
DataMember = "Orders", DataSource = custs};

Button btn;
using (Form form = new Form
{
Controls = {
new DataGridView() {
DataSource = orders, DataMember = "Order_Details",
Dock = DockStyle.Fill},
new ComboBox() {
DataSource = orders, DisplayMember = "OrderID",
Dock = DockStyle.Top},
new ComboBox() {
DataSource = custs, DisplayMember = "CompanyName",
Dock = DockStyle.Top},
(btn = new Button() {
Text = "Save", Dock = DockStyle.Bottom
}), // **edit here re textbox etc**
new TextBox {
DataBindings = {{"Text", orders, "ShipAddress"}},
Dock = DockStyle.Bottom
},
new Label {
DataBindings = {{"Text", custs, "ContactName"}},
Dock = DockStyle.Top
},
new Label {
DataBindings = {{"Text", orders, "RequiredDate"}},
Dock = DockStyle.Bottom
}
}
})
{
btn.Click += delegate {
form.Text = "Saving...";
ctx.SubmitChanges();
form.Text = "Saved";
};
Application.Run(form);
}
}
}

顺便说一句——注意语法:

DataBindings = {{"Text", orders, "ShipAddress"}}

相当于:

someTextBox.DataBindings.Add("Text", orders, "ShipAddress");

(我只添加这个,因为这是一个常见问题)

关于c# - 如何将 Linq2SQL 集合数据绑定(bind)到 winform 文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881885/

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