2005-09-24 Gonzalo Paniagua Javier <gonzalo@ximian.com>
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Sat, 24 Sep 2005 22:45:41 +0000 (22:45 -0000)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Sat, 24 Sep 2005 22:45:41 +0000 (22:45 -0000)
* DataList.cs: fill in the data keys from BaseDataList so that the
events can see them. Only assign DataItem when using data binding and
nullify it after all events are raised. Thanks to Joe Audette for quick
updates on this.

svn path=/trunk/mcs/; revision=50695

mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/DataList.cs

index ca946c6c9cbf93a96688bc5d408421067c292337..e73d463a1b73941e0845d5f33f59892ce41d6550 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-24 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * DataList.cs: fill in the data keys from BaseDataList so that the
+       events can see them. Only assign DataItem when using data binding and
+       nullify it after all events are raised.
+
 2005-09-24 Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * DataList.cs: OnItemCommand() is raised any time OnBubbleEvent is
index af94035dfc4b7b552f0503b09bc63eec11c6c499..b661e146e5e61ac8faf661aeaf83a3a3ccc41568 100644 (file)
@@ -494,7 +494,8 @@ namespace System.Web.UI.WebControls {
                void DoItem (int i, ListItemType t, object d, bool databind)
                {
                        DataListItem itm = CreateItem (i, t);
-                       itm.DataItem = d;
+                       if (databind)
+                               itm.DataItem = d;
                        DataListItemEventArgs e = new DataListItemEventArgs (itm);
                        InitializeItem (itm);
                        
@@ -505,11 +506,13 @@ namespace System.Web.UI.WebControls {
                        Controls.Add (itm);
                        if (i != -1)
                                ItemList.Add (itm);
+
                        OnItemCreated (e);
 
                        if (databind) {
                                itm.DataBind ();
                                OnItemDataBound (e);
+                               itm.DataItem = null;
                        }
                }
 
@@ -526,10 +529,13 @@ namespace System.Web.UI.WebControls {
                        Controls.Clear();
 
                        IEnumerable ds = null;
+                       ArrayList keys = null;
 
                        if (useDataSource) {
                                idx = 0;
                                ds = DataSourceResolver.ResolveDataSource (DataSource, DataMember);
+                               keys = DataKeysArray;
+                               keys.Clear ();
                        } else {
                                idx = (int) ViewState ["Items"];
                        }
@@ -542,7 +548,10 @@ namespace System.Web.UI.WebControls {
 
                        // items
                        if (ds != null) {
+                               string key = DataKeyField;
                                foreach (object o in ds) {
+                                       if (useDataSource && key != "")
+                                               keys.Add (DataBinder.GetPropertyValue (o, key));
                                        DoItemInLoop (idx, o, useDataSource);
                                        idx++;
                                }