2012-02-18 2 views
0

У меня есть форма, которая имеет одно текстовое поле, которое отправляет некоторые данные в базу данных при попадании в нее. Данные отображаются под текстовым полем в элементе управления ретранслятора. Входные данные отображаются в форме немедленно, связывая данные с ретранслятором в событии TextChanged этого текстового поля.Как этот код лучше писать?

В CodeBehind я вызываю метод BindRepeater дважды, один раз при каждой новой загрузке страницы и один раз в событии TextChanged текстового поля.

Как это можно переписать для вызова BindRepeater только один раз и до сих пор добиться того же эффекта?

protected void Page_Load(object sender, EventArgs e) 
{  
    if (!this.IsPostBack) 
    { 
     BindRepeater(); 
    } 
} 

protected void BindRepeater() 
{ 
    // data retrieval 
    // repeater binding 
} 

protected void CreateData(string newdata) 
{ 
    // data insert 
} 

protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (TextBox1.Text != string.Empty) 
    { 
     string _newData = TextBox1.Text.Trim(); 
     CreateData(_newData); 
     BindRepeater(); 
    } 
} 
+0

Любая конкретная причина, по которой вы не хотите называть это из двух мест? Код выглядит нормально для меня! – DavidGouge

+2

Вероятно, принадлежит по адресу http://codereview.stackexchange.com/ –

+0

@DavidGouge: Нормально ли это делать, даже если есть больше мест, где может быть вызван BindRepeater? – Animesh

ответ

1

Используйте событие, которое будет уволен после того, как изменить текст, события, чтобы сделать привязку. Теперь вы можете удалить его из события загрузки страницы.

+0

Я вызываю его в событии Page_Load, так что существующие данные отображаются при загрузке первой страницы. – Animesh

+0

Это все равно будет вызвано в другом случае –

+0

Извините, я не понял, как это сделать. Не могли бы вы добавить псевдо-код? – Animesh