【问题标题】:Linq to SQL: Updating dataGridView after SubmitChanges isn't workingLinq to SQL:在 SubmitChanges 后更新 dataGridView 不起作用
【发布时间】:2013-05-01 15:14:43
【问题描述】:

我第一次使用 LINQ,遇到了一个奇怪的问题。我正在使用 MS SQL 2008。如果我更改一行并 SubmitChanges(),我可以在 SQL Server Management Studio 中看到更改,但是当我查询以使用更新的信息重新填充我的 dataGridViews 时,我得到了旧版本的数据。

以下是我的数据变化:

        if (textBox1.Text.Length > 1)
        {
            var query = from eq in db.equipments
                        where eq.SerNo == serial
                        select eq;

            foreach (equipment equip in query)
            {
                equip.Loc = textBox1.Text;
                equip.Owner = "Evisive";
                equip.Status = updatedStatus;
                equip.SystemName = "";
            }

            db.SubmitChanges();
        }

        else
        {
            MessageBox.Show("Enter a Destination");
        }

同样,该部分有效(更改数据库中的数据)。下面是我尝试更新表格的地方(似乎不起作用的部分):

    public void Update_EquipmentGrid()
    {
        BindingSource b = new BindingSource();
        b.DataSource = from eq in db.equipments
                       select eq;
        dataGridView2.DataSource = b;
    }

这不是更新表格的正确方法吗?

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    想通了。这个链接解释了它。

    http://msdn.microsoft.com/en-us/library/Bb386982(v=vs.110).aspx

    代码应该是:

            InventoryDataContext dba = new InventoryDataContext();
    
            BindingSource b = new BindingSource();
            b.DataSource = from eq in dba.equipments
                           select eq;
    
            dataGridView2.DataSource = b;
    

    不知道为什么,但您需要在每次更新 DataContext 时创建一个新实例。

    【讨论】:

    【解决方案2】:

    试试

    dataGridView2.DataSource = null;
    

    之前

    dataGridView2.DataSource = b;
    

    还可以在分配之前尝试将您的数据转换为列表。

    b.DataSource = (from eq in db.equipments
                    select eq).ToList();
    

    【讨论】:

    • 第一个建议好像没有效果,第二个禁用了dataGridView上的搜索功能。
    • db.equipments 的返回类型是什么?它是可枚举的吗? AutoGenerateColumns 属性是否也设置为 true?
    • 不确定如何找到它。当我将鼠标悬停在它上面时,它被列为 System.Data.Linq.Table InventoryDataContext 设备。是的,AutoGenerateColumns 属性是 true。
    【解决方案3】:

    也许这对你有帮助

    https://www.devexpress.com/Support/Center/Question/Details/Q142798

    示例:

    var orders = DBInterface.dcAPI.OrderInfos;
    var b = orders.GetNewBindingList();
    dgOrders.ItemsSource = b;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2010-09-28
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多