【问题标题】:Bound DataGridView with multiple sources将 DataGridView 与多个源绑定
【发布时间】:2013-10-30 17:22:49
【问题描述】:

我已经为此苦苦挣扎了一段时间,这让我发疯。情况是这样的:

我有一个有界的DataGridView 我与视觉工作室设计师一起设计了这个。所有信息都会相应显示。

在我的DataGridView 中,我有 2 个ComboBoxes,这里的数据也正确显示。如果我点击ComboBoxea 选项列表,我希望它显示。

因为DataGridView 绑定到一个源,所以我不能使用ComboBox.Items.Add() 方法。所以我在设计器中创建了另一个数据源,在运行时我为那个特定的组合框更改了datasource现在列表显示了我想要的选项,耶!

现在,我想将这个新添加或更改的行保存到数据库中。所以我为此使用以下方法(我从DataGridView 调用RowLeave 事件上的方法):

        if (tasksDataSet.HasChanges()
        {
            try
            {
                tasksBindingSource.EndEdit();
                tasksDataSet.GetChanges();
                tasksTableAdapter.Update(tasksDataSet);
            }
            catch (Exception ex)
            {

            }
         }

这不适用于ComboBoxes,因为这是另一个数据源。

所以基本上我想要的是:

  • 使用DataGridView 的数据源
  • 更改/添加项目到DataGridViewComboBox
  • 将对(完整)DataGridView 所做的更改保存到数据库中

我怎样才能使这项工作?

【问题讨论】:

    标签: c# winforms datagridview datagridviewcombobox


    【解决方案1】:

    如果您的问题是保存提供给网格视图的当前数据。 比我建议尝试使用 session 。在将数据绑定到 DataSource 时将其分配给 会话["SomeID"] 。如果您更改绑定,则再次为其分配相同的会话。

    下一步将会话转换为您想要保存的任何内容。

    例如:

            //Datasource.
            list<User> DataBoundSource = new list<User>();
    
            DataGrid.DataSource = DataBoundSource;
            DataGrid.DatBind();
            //Assign to Session where you are binding this
            //every time
            Session["SameID"] = lsDataBoundSOurce;
    
            //your code.
            ...
            ...
            ...
    
            //covert that session to Datasource you want to save.
    
            list<User> saveData = (list<User>) Session["SameID"];
    

    这是我得到的基本想法。我希望这会对你有所帮助。 如果对你有帮助,请给它+1

    【讨论】:

    • 这将改变整个数据网格的数据源,保存的问题是我有另一个用于组合框的数据源
    • 我不是在告诉您更改数据源。将您的数据源分配给会话,然后通过转换它来保存该会话。如果可能,请发布一些代码,以便我可以帮助您。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2011-08-08
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2017-03-20
    相关资源
    最近更新 更多