2011-10-23 37 views
0

我正在使用c#[ASP.NET 2.0 - VS 2005],並且我想實現觀察者模式以在DropDown索引更改時觸發方法(駐留在類中)。有三個DropDown和一個標籤控件,當DropDown索引發生變化時,它應該實時顯示新生成的方案代碼。實現Observer模式來執行類中的方法

public sealed class GetSchemeCode:INotifyPropertyChanged 
{ 

    private string _distCode; 
    private string _blockCode; 
    private string _schmType; 


    public string DistCode 
    { 
     get { return _distCode; } 
     set { _distCode = value; } 
    } 
    public string BlockCode 
    { 
     get { return _blockCode; } 
     set { _blockCode = value; } 
    } 
    public string SchemeType 
    { 
     get { return _schmType; } 
     set { _schmType = value; } 
    } 


    public GetSchemeCode() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 


    protected string GetNewSchemeCode() 
    { 
     SqlCommand cmdSchmCode = new SqlCommand("GenerateSchemeCode", dbConnection.cn); 
     try 
     { 
      cmdSchmCode.CommandType = System.Data.CommandType.StoredProcedure; 
      //Add Parameters 
      cmdSchmCode.Parameters.AddWithValue("@districtCode", DistCode.ToString()); 
      cmdSchmCode.Parameters.AddWithValue("@blockCode", BlockCode.ToString()); 
      cmdSchmCode.Parameters.AddWithValue("@schemeType", SchemeType.ToString()); 
      dbConnection.OpenConnection("Scheme"); 
      return cmdSchmCode.ExecuteScalar(); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      cmdSchmCode.Dispose(); 
      dbConnection.CloseConnection(); 
     } 
    } 

} 
+0

C#有一個觀察者模式實現 –

+1

我想要世界和平,但這不是問題。你有什麼問題?你有什麼嘗試?你堅持什麼? – Enigmativity

+0

我已經明確提到我被卡住的地方。無論如何,當任何屬性更改時,我想調用GetNewSchemeCode()方法。 – RKh

回答

1

做一些類似下面的代碼來連接下拉列表的選定索引更改屬性。這就是Asp.Net在幕後執行觀察者模式,我相信。您可以在代碼或HTML標記中設置AutoPostBack屬性和事件連接。

public GetSchemeCode() 
{ 
     DistCodeDropDownList.AutoPostBack = true; 
     DistCodeDropDownList.SelectedIndexChanged += new EventHandler(DistCodeDropDownList_SelectedIndexChanged); 

     // TODO: Hook up the other DropDownLists here. as well 
} 

    void DistCodeDropDownList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     CodeOutputLabel.Text = GetNewSchemeCode(); 
    } 
1

C#已經取代了Observer模式,它有事件;事件是Observer模式的語言級別實現。你想要做的是在你的對象上創建一個事件,然後讓你的觀察者訂閱它。