我会在这里解释我的问题...
我使用2种表格。第一个具有下拉菜单和网格控件,在下拉菜单中选择项目后填充。在填充gridControl之后,我有一个按钮来添加包含数据的新行。当我单击它时,将打开一个新表单,其中textFields将填充,并保存按钮以保存更改并刷新gridControl。 以下是第一种形式的代码,其中gridControl在dropDown菜单中的select项之后填充:
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天没能解决这个问题...我希望我能解释清楚:))
答案 0 :(得分: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();
}
答案 1 :(得分:0)
在btnSave_Click中,当您创建新表单对象frmScoreType frmST = new frmScoreType();
时,您不再引用第一个打开的表单。在您的情况下,gcScoreParam.DataSource = null;
将您创建的新对象的数据源设置为null,而不是为打开的表单设置。
尝试使用(frmScoreType)Application.OpenForms["frmScoreType"].RefreshGVParams(db);
现在你的函数RefreshGVParams将由打开的表单执行。
或者你也可以控制你打开的表格,如下所示:
frmScoreType f = (frmScoreType)Application.OpenForms["frmScoreType"]
并首先检查是否f == null
(以查看您的表单是否已打开,以及之后是f.RefreshGVParams(db);
请原谅我的英语。希望它有所帮助。