asp.net中Winform開發架構之資料即時更新的實現

來源:互聯網
上載者:User

標籤:winform   http   io   os   ar   for   sp   資料   on   

在開篇之前,首先介紹一下Winform開發架構中的介面層的繼承關係,首先我把所有表單區分為三類,一類是普通的表單,一類編輯表單,還有一類是列表顯示表單。表單的整合可以封裝處理很多東西,良好的封裝和繼承,可以為我們提高效率,減少重複代碼,它的作用不再在此討論和強調。

採用表單繼承,極大程度上統一了介面,並且對常用的介面操作,提供了良好的封裝,如基礎資料編輯、新增表單積累封裝了對斷行符號、方向鍵、資料重新整理、異常處理、資料檢查、資料儲存、資料更新等介面,為表單的資料處理提供了很大的方便性。
而資料查詢顯示表單則考慮到多文檔展示的需要,一般繼承合適的基類,封裝一些常用到的介面布局,以便實現相應的介面處理效果。

上面所述的三類表單,繼承的介面基類分別是下面幾個。普通的表單繼承自BaseForm,編輯表單繼承自BaseEditForm,列表顯示表單繼承自BaseDock。在工程中如下所示。

 

在UML設計圖中,我們看到他的關係如下所示,其中綠色邊框的為我們上面的基類,紅色邊框的是我們實際的表單對象,從這個圖中,我們可以很清晰看到他的關聯關係。

 

BaseEditForm相對來說,比其他兩個基類表單複雜一些,他除了提供幾個資料儲存必須的按鈕外,還可以通過前後進行資料查看,他的初始化介面及應用例子介面如下所示。

 

 

2、Winform開發架構之資料即時更新的實現
介紹完上面的繼承關係後,我們來看看基於這種繼承模式,如何?資料及時更新的操作,也就是在資料儲存表單,儲存資料後,資料記錄同步在列表中展現的效果。

1)首先在基類介面BaseEditForm中添加事件處理

代碼如下 複製代碼
public partial class BaseEditForm : BaseForm
{
public event EventHandler OnDataSaved;//子表單資料儲存的觸發


2)然後添加事件的處理操作,如下所示。

代碼如下 複製代碼
/// <summary>
/// 處理資料儲存後的事件觸發
/// </summary>
public virtual void ProcessDataSaved(object sender, EventArgs e)
{
if (OnDataSaved != null)
{
OnDataSaved(sender, e);
}
}

3)在資料儲存的時候,觸發即時更新資料的事件

代碼如下 複製代碼
/// <summary>
/// 儲存資料(新增和編輯的儲存)
/// </summary>
public virtual bool SaveEntity()
{
bool result = false;
if(!string.IsNullOrEmpty(ID))
{
//編輯的儲存
result = SaveUpdated();
}
else
{
//新增的儲存
result = SaveAddNew();
}

return result;
}

/// <summary>
/// 更新已有的資料
/// </summary>
/// <returns></returns>
public virtual bool SaveUpdated()
{
return true;
}

/// <summary>
/// 儲存新增的資料
/// </summary>
/// <returns></returns>
public virtual bool SaveAddNew()
{
return true;
}

(www.111cn.net) /// <summary>
/// 儲存
/// </summary>
/// <param name="close">關閉表單</param>
private void SaveEntity(bool close)
{
// 檢查輸入的有效性
if (this.CheckInput())
{
// 設定滑鼠繁忙狀態
this.Cursor = Cursors.WaitCursor;
try
{
if (this.SaveEntity())
{
ProcessDataSaved(this.btnOK, new EventArgs());

MessageDxUtil.ShowTips("儲存成功");
if (close)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
this.ClearScreen();
}
}
}
catch (Exception ex)
{
this.ProcessException(ex);
}
finally
{
// 設定滑鼠預設狀態
this.Cursor = Cursors.Default;
}
}
}

以上屬於基類的資料儲存操作,我們特別注意這段代碼即可

 

代碼如下 複製代碼
if (this.SaveEntity()) {
ProcessDataSaved(this.btnOK, new EventArgs());

4)列表展現介面的操作實現

實現上面的操作後,這些就不需要在BaseEditForm的子類做任何操作了,只需要在具體的列表展現介面類中實現下面的代碼即可。

我們知道,列表介面一般都會有具體的資料重新整理函數封裝(如BindData函數),那麼我們在建立資料的時候,實現代碼是這樣的。

代碼如下 複製代碼
/// <summary>
/// 新增資料操作
/// </summary>
private void btnAddNew_Click(object sender, EventArgs e)
{
FrmEditLaw dlg = new FrmEditLaw();
dlg.OnDataSaved += new EventHandler(dlg_OnDataSaved);
dlg.ShowDialog();
}

void dlg_OnDataSaved(object sender, EventArgs e)
{
BindData();
}

這樣我們在新表單(資料添加、資料編輯)中維護資料的時候,一旦觸發儲存操作,這些最新的資料記錄也在列表中展現出來了。
from:http://www.111cn.net/net/171/43076.htm

asp.net中Winform開發架構之資料即時更新的實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.