【问题标题】:Problems submitting DataGridView changes with Linq-to-SQL使用 Linq-to-SQL 提交 DataGridView 更改时出现问题
【发布时间】:2010-07-28 15:13:35
【问题描述】:

我正在尝试通过DataGridView 控件实现数据库值版本,但老实说,我很难做到这一点。我基本上使用的是 LINQ-to-SQL 类和事件,以下是最重要的 sn-ps:

var data =  from q in data.FOOBARS
            select new
            {
                ID = q.FOOBAR_ID,
                LOREM = q.FOOBAR_LOREM,
                IPSUM = q.FOOBAR_IPSUM
            };

DataGridView grid = new DataGridView();
grid.DataSource = data;

// grid EVENTS     
private void grid_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    this.grid.CurrentCell.ReadOnly = false;
    this.grid.BeginEdit(true);
}

private void grid_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    if (this.grid.CurrentCell.IsInEditMode)
    {   
        // METHOD CALL            
        this.SetVariableValue(this.grid.CurrentRow.Cells["ID"].Value.ToString(), this.grid.CurrentCell.OwningColumn.Name, this.grid.CurrentCell.FormattedValue.ToString(), this.grid.CurrentCell.EditedFormattedValue.ToString());
    }

    this.grid.CommitEdit(DataGridViewDataErrorContexts.Commit);
    this.grid.EndEdit();
}

// METHOD IMPL
private void SetVariableValue(string id, string type, string current, string edited)
{
    try
    {
        if (current != edited)
        {
            using (FOOBARDataClassesDataContext data = new FOOBARDataClassesDataContext(this.BuildConnection()))
            {
                data.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");

                switch (type)
                {
                    case "LOREM":
                        var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_LOREM;
                        currentLorem = edited;
                        data.SubmitChanges(ConflictMode.ContinueOnConflict);
                        break;

                    case "IPSUM":
                        var currentIpsum = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_IPSUM;
                        currentIpsum = edited;
                        data.SubmitChanges(ConflictMode.ContinueOnConflict);
                        break;

                    default:
                        break;
                }
                data.Refresh(RefreshMode.OverwriteCurrentValues);
            }
        }
    }
    catch (Exception error)
    {
        if (logger.IsErrorEnabled) logger.Error(error.Message);
    }
}

调试看起来不错,对象实际上正在更新,但由于某种原因,更改既没有提交也没有更新。

任何帮助都将不胜感激。非常感谢你们!

【问题讨论】:

  • 在纠结了一段时间后,我得出结论,这与 DataGridView 无关。我已经用这个问题的奇怪解决方案编辑了代码。

标签: c# winforms linq-to-sql visual-studio-2010 datagridview


【解决方案1】:

由于某种原因,这不起作用

var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id)).FOOBAR_LOREM;
currentLorem = edited;
data.SubmitChanges(ConflictMode.ContinueOnConflict);

但是这个确实(注意第 1 行和第 2 行,FOOBAR_LOREM 属性的变化):

var currentLorem = data.FOOBARS.SingleOrDefault(v => v.FOOBAR_ID == Convert.ToInt32(id));
currentLorem.FOOBAR_LOREM = edited;
data.SubmitChanges(ConflictMode.ContinueOnConflict);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多