0

我将尝试在这里解释我的问题...

我使用 2 种表格。第一个具有下拉菜单和在下拉菜单中选择项目后填充的网格控件。填充gridControl后,我有一个按钮来添加新的数据行。当我单击它时,将打开新表单,其中包含要填充的文本字段,并保存按钮以保存更改并刷新 gridControl。这是第一个表单的代码,其中在下拉菜单中选择项目后填充了 gridControl:

private void ddScoreType_EditValueChanged(object sender, EventArgs e)
    {
        ddScoreTypeSelectedID = Convert.ToInt32((sender as LookUpEdit).EditValue);
        try
        {
            gcScoreParam.DataSource = null;
            gvScoreParam.Columns.Clear();
            selectedScoreType = _db.ScoreTypes.Where(x => x.ID == ddScoreTypeSelectedID).SingleOrDefault();
            gcScoreParam.DataSource = selectedScoreType.ScoreParams.ToList();

            gvScoreParam.Columns.AddVisible("Name", "Name");
            gvScoreParam.Columns.AddVisible("Code", "Code");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

这很好......这是我的第二个输入表单中的代码,我应该在第一个表单中添加新数据并刷新 gridControl:

private void btnSave_Click(object sender, EventArgs e)
    {
        //XtraMessageBox.Show("ID - " + _ScoresTypeID);
        db = new BetEntities();
        ScoreParam param = new ScoreParam();

        db.ScoreParams.Add(param);
        param.ScoreTypeID = _ScoresTypeID;
        param.Name = txtScoreName.Text;
        param.Code = txtScoreCode.Text.ToUpper();

        db.SaveChanges();

        frmScoreType frmST = new frmScoreType();
        frmST.RefreshGVParams(db);

        this.Close();
    }

db 是我的数据库,ScoreParam 是表。这是方法 RefreshGVParams:

public void RefreshGVParams(BetEntities be)
    {
        //gvScoreParam.BeginDataUpdate();
        gcScoreParam.BeginUpdate();
        try
        {
            gcScoreParam.DataSource = null;      // this line DOES NOT set datasource to null
            selectedScoreType = be.ScoreTypes.Where(x => x.ID == ddScoreTypeSelectedID).SingleOrDefault();
            gcScoreParam.DataSource = selectedScoreType.ScoreParams.ToList();
            gvScoreParam.Columns.Clear();
            gvScoreParam.Columns.AddVisible("Name", "Name");
            gvScoreParam.Columns.AddVisible("Code", "Code");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        { 
            gcScoreParam.EndUpdate();
            //gvScoreParam.EndDataUpdate();
        }
    }

我评论了没有将dataSource设置为null的行,并且gridcontrol没有用新数据刷新......当我关闭我的第一个表单并重新启动它时,我看到它用新数据刷新......

单击第二种形式的“保存”按钮后,如何刷新第一种形式的 gridControl?我在哪里犯了错误?

很抱歉发了很长的帖子,但是自从我无法解决这个问题以来已经有 2 天了......我希望我解释得很好:)

4

2 回答 2

0

在 btnSave_Click 中,当您创建一个新的表单对象时,frmScoreType frmST = new frmScoreType();您不再引用您打开的第一个表单。gcScoreParam.DataSource = null;在您的情况下,将您创建的新对象的数据源设置为空,而不是打开的表单。尝试使用(frmScoreType)Application.OpenForms["frmScoreType"].RefreshGVParams(db); ,现在您的函数 RefreshGVParams 将由打开的表单执行。或者您也可以像这样控制您打开的表格: frmScoreType f = (frmScoreType)Application.OpenForms["frmScoreType"]并首先检查是否f == null(查看您的表格是否已打开,然后打电话f.RefreshGVParams(db); 请原谅我的英语。希望它有所帮助。

于 2015-02-16T16:07:23.097 回答
0

假设您的第二个表单名称是 Form2,则在添加新行按钮单击事件中添加/替换以下代码

Form2 f2 = new Form2();
f2.ShowDialog();
RefreshGVParams((BetEntities)f2.Tag);

在您的 Form2 上将 btnSave_Click 代码更改为

private void btnSave_Click(object sender, EventArgs e)
{        
    db = new BetEntities();
    ScoreParam param = new ScoreParam();

    db.ScoreParams.Add(param);
    param.ScoreTypeID = _ScoresTypeID;
    param.Name = txtScoreName.Text;
    param.Code = txtScoreCode.Text.ToUpper();

    db.SaveChanges();

    this.Tag = db; 

    this.Close();
}
于 2013-10-08T11:13:30.320 回答