#c# #.net #.net-2.0 #c#-2.0 #asp.net-2.0
#c# #.net #.net-2.0 #c #-2.0 #asp.net-2.0
Вопрос:
Я использую c # [ASP.NET 2.0 — VS 2005] и я хочу реализовать шаблон наблюдателя для запуска метода (находящегося в классе) при изменении выпадающего индекса. Есть три выпадающих списка и элемент управления Label, который должен отображать вновь сгенерированный код схемы в режиме реального времени по мере изменения индекса выпадающего списка.
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();
}
}
}
Комментарии:
1. C # имеет реализацию шаблона наблюдателя
2. Я хочу мира во всем мире, но это не вопрос. В чем ваш вопрос? Что вы пробовали? На чем ты застрял?
3. Я четко упомянул, где я застрял. В любом случае, я хочу вызвать метод GetNewSchemeCode() при изменении любого свойства.
4. @RPK — Извините, все еще не вижу этого. Возможно, вам потребуется предоставить более подробную информацию.
5. Вы не запускаете
PropertyChanged
. Я согласен, что вопрос не ясен.
Ответ №1:
Сделайте что-то вроде приведенного ниже кода, чтобы подключить свойство selected index, измененное в выпадающем списке. Это Asp.Net я полагаю, что это реализация шаблона Наблюдателя за кулисами. Вы можете установить свойство AutoPostBack и подключение события либо в коде, либо в разметке html.
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();
}
Ответ №2:
C # заменил шаблон Observer, у него есть события; события — это реализация шаблона Observer на уровне языка. Что вы хотите сделать, это создать событие для вашего объекта, а затем заставить ваших наблюдателей подписаться на него.