2013-10-08 102 views
0

我會盡力在這裏解釋我的問題...刷新數據源和更新GridControl

我使用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(); 
     } 
    } 

我評論說,不設置數據源爲空就行了,gridcontrol沒有新的數據刷新... 當我結束我的第一種形式,並再次啓動它,然後我看到它與新的數據更新......

我怎麼能刷新gridControl在第一種形式單擊第二種形式SAVE按鈕後?我做錯了什麼?

對不起,長的帖子,但它過2次天了......我希望我解釋好:)

回答

0

添加/替換添加新行按鈕單擊事件下面的代碼我解決不了這個問題,假設你的第二個表格名稱爲窗體2

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

在你的窗體2更改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(); 
} 
+0

號。 。這並沒有解決這個問題: - / – Mlad3n

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); 請原諒我的英語希望它可以幫助