2013-04-15 1 views
1

Я пытаюсь сделать обычай BoundField (столбец) для моего заказа GridView. Я добавил текстовые поля в FooterRow для управления фильтрацией по столбцам. Он хорошо отображен, но событие TextChanged никогда не поднимается. Я думаю, это потому, что текстовые поля воссозданы при каждой обратной передаче и не сохраняются.Событие с TextChanged в динамически создаваемом текстовом поле в пользовательском BoundField никогда не срабатывает?

Вот мой код:

public class Column : BoundField 
{ 
    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) 
    { 
     base.InitializeCell(cell, cellType, rowState, rowIndex); 
     if (cellType == DataControlCellType.Footer) 
     { 
      TextBox txtFilter = new TextBox(); 
      txtFilter.ID = Guid.NewGuid().ToString(); 
      txtFilter.Text = ""; 
      txtFilter.AutoPostBack = true; 
      txtFilter.TextChanged += new EventHandler(txtFilter_TextChanged); 
      cell.Controls.Add(txtFilter); 
     } 
    } 

    protected void txtFilter_TextChanged(object sender, EventArgs e) 
    { 
     // Never get here 
    } 
} 

Я попытался с флажком, и это сработало.

+0

это winforms или asp.net? –

+0

Нет, это ASP.NET –

+0

вы можете оставить свой собственный ответ - и отметьте его как принятый – MikroDel

ответ

0

Решение:

я, наконец, нашел проблему, но я не понимаю! Проблема заключается в свойстве идентификатора, сгенерированном с помощью Guid. Просто удалить его решила моя проблема.

public class Column : BoundField 
{ 
    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) 
    { 
     base.InitializeCell(cell, cellType, rowState, rowIndex); 
     if (cellType == DataControlCellType.Footer) 
     { 
      TextBox txtFilter = new TextBox(); 
      // Removing this worked 
      //txtFilter.ID = Guid.NewGuid().ToString(); 
      txtFilter.Text = ""; 
      txtFilter.AutoPostBack = true; 
      txtFilter.TextChanged += new EventHandler(txtFilter_TextChanged); 
      cell.Controls.Add(txtFilter); 
     } 
    } 

    protected void txtFilter_TextChanged(object sender, EventArgs e) 
    { 
     // Never get here 
    } 
} 
1

У меня была такая же проблема в приложении WPF. Это просто работа для меня, как таким образом,

TextBox txtBx = new TextBox(); 
txtBx.Width = 300; 
txtBx.TextChanged += txtBox_TextChanged; 

И Он называет,

private void txtBox_TextChanged(object sender, EventArgs e) 
    { 
     errorTxt.Text = "Its working"; 
    } 

"errorTxt" представляет собой предварительно определенный TextBlock. Надеюсь, это поможет кому-то.