ListView: FindControl im EditItemTemplate

Allgemein 24 Juni 2010 | 0 Comments

Hier eine einigermaßen vernünftige Lösung um in einem ListView WebControls im EditItemTemplate anzusprechen und Daten vom ListViewDataItem daran zu binden. Ersteres, also das ansprechen der WebControls, ist über den Event “OnItemEditing” kein Problem. Hier liegt beim DataItem der Hase im Pfeffer. Bisher habe ich keine Lösung gefunden an das DataItem im “OnItemEditing”-Event zu kommen. Der logische Versuch über

1
var dataItem = MyListView.Items[e.NewEditIndex].DataItem;

an das ListViewDataItem zu kommen schlug fehl, da es immer Null ist.

Nach langem tüfteln habe ich nun eine gute Lösung gefunden. Im “ItemDataBound”-Event wird neben dem ItemType auch der DisplayIndex mit dem EditIndex verglichen. Ist dieser gleich und der EditIndex ist gesetzt (else if-zweig) befinden wir uns EditItemTemplate und können auf die WebControls und das ListViewDataItem zugreifen.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        protected void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem && e.Item.DisplayIndex != MyListView.EditIndex)
            {
                 //ItemTemplate
                 //Hier können ganz normal die WebControls des ItemTemplates per FindControl angesprochen werden.
            }
            else if(MyListView.EditIndex > -1 &&  e.Item.DisplayIndex == MyListView.EditIndex)
            {
                //EditItemTemplate

                var dataItem = (BeispielObject)((ListViewDataItem)e.Item).DataItem;

                var editItemDropDownList = (DropDownList)e.Item.FindControl("EditItemDropDownList");
                editItemDropDownList .DataSource = BusinessLogic.GetDataSource();
                editItemDropDownList .DataBind();
                forumCategorieDropDownList.SelectedValue = dataItem.Value;                          
           }
        }

Tagged in , , , , , , ,

[.NET] HttpContext und UnitTests

Allgemein 17 Februar 2009 | 0 Comments

Da ich Unit Testing sehr mag und mehr oder weniger darauf angewiesen bin musste ich vor kurzem ein nerviges Problem lösen was vorallem des öfteren unter ASP.NET WebSites und WebServices auftritt. Verwendet man in einer Methode oder Funktion das Objekt “HttpContext” scheitert der UnitTest kläglich bzw. kann nicht weiter ausgeführt werden da in der UnitTest-Umgebung der HttpConext den Wert “null” hat. Nach ein wenig Googeln habe ich mir eine annehmbare Lösung gestrickt. Man simuliert einen HttpContext im Konstruktor der Testklasse und gaukelt somit der zu testenten Applikation einen HttpContext vor.

Hier das Code-Beispiel dafür, funktioniert bei mir einwandfrei. Der Inhalt der Variablen ist dabei relativ egal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public class IrgendwasTest
    {      
        public IrgendwasTest()
        {
            string appVirtualDir = "/";
            string appPhysicalDir = @"C:\Users\";
            string page = @"localhost";
            string query = string.Empty;
            TextWriter output = null;        
            SimpleWorkerRequest workerRequest = new SimpleWorkerRequest(appVirtualDir, appPhysicalDir, page, query, output);
            HttpContext context = new HttpContext(workerRequest);
            HttpContext.Current = context;
        }
}

Tagged in , , , , ,