TableItemStyle pagerStyle;
TableItemStyle rowStyle;
TableItemStyle selectedRowStyle;
+ ArrayList _dataKeyArrayList;
DataKeyArray keys;
DataKey oldEditValues;
AutoGeneratedFieldProperties[] autoFieldProperties;
// Control state
int pageIndex;
- int pageCount;
int selectedIndex = -1;
int editIndex = -1;
SortDirection sortDirection = SortDirection.Ascending;
RequireBinding ();
}
}
+
+ ArrayList DataKeyArrayList {
+ get {
+ if (_dataKeyArrayList == null) {
+ _dataKeyArrayList = new ArrayList ();
+ }
+ return _dataKeyArrayList;
+ }
+ }
[BrowsableAttribute (false)]
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
public virtual DataKeyArray DataKeys {
get {
- EnsureDataBound ();
+ if (keys == null) {
+ keys = new DataKeyArray (DataKeyArrayList);
+ if (IsTrackingViewState)
+ ((IStateManager) keys).TrackViewState ();
+ }
return keys;
}
}
+ DataKey OldEditValues {
+ get {
+ if (oldEditValues == null) {
+ oldEditValues = new DataKey (new OrderedDictionary ());
+ }
+ return oldEditValues;
+ }
+ }
+
[WebCategoryAttribute ("Misc")]
[DefaultValueAttribute (-1)]
public virtual int EditIndex {
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
public virtual int PageCount {
get {
- if (pageCount != 0) return pageCount;
- EnsureDataBound ();
- return pageCount;
+ return ViewState.GetInt ("PageCount", 0);
+ }
+ private set {
+ ViewState ["PageCount"] = value;
}
}
[DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
public virtual DataKey SelectedDataKey {
get {
- if (DataKeys == null)
+ if (keys == null)
throw new InvalidOperationException ("DataKeys");
if (selectedIndex >= 0 && selectedIndex < DataKeys.Count) {
{
if (Initialized) {
RequiresDataBinding = true;
- pageCount = -1;
}
}
}
}
- pageCount = dataSource.PageCount;
+ PageCount = dataSource.PageCount;
}
else
{
Controls.Add (table);
ArrayList list = new ArrayList ();
- ArrayList keyList = new ArrayList ();
// Creates the set of fields to show
OnRowDataBound (new GridViewRowEventArgs (row));
if (EditIndex == row.RowIndex)
oldEditValues = new DataKey (GetRowValues (row, false, true));
- keyList.Add (new DataKey (CreateRowDataKey (row), DataKeyNames));
- } else {
- if (EditIndex == row.RowIndex)
- oldEditValues = new DataKey (new OrderedDictionary ());
- keyList.Add (new DataKey (new OrderedDictionary (), DataKeyNames));
- }
+ DataKeyArrayList.Add (new DataKey (CreateRowDataKey (row), DataKeyNames));
+ }
if (list.Count >= PageSize)
break;
}
rows = new GridViewRowCollection (list);
- keys = new DataKeyArray (keyList);
return dataSource.DataSourceCount;
}
public sealed override void DataBind ()
{
+ DataKeyArrayList.Clear ();
cachedKeyProperties = null;
base.DataBind ();
+
+ keys = new DataKeyArray (DataKeyArrayList);
}
protected internal override void PerformDataBinding (IEnumerable data)
if (rowIndex != EditIndex) throw new NotSupportedException ();
- if (oldEditValues == null)
- currentEditOldValues = new OrderedDictionary ();
- else
- currentEditOldValues = oldEditValues.Values;
+ currentEditOldValues = OldEditValues.Values;
GridViewRow row = Rows [rowIndex];
currentEditRowKeys = DataKeys [rowIndex].Values;
object[] state = (object[]) ob;
base.LoadControlState (state[0]);
pageIndex = (int) state[1];
- pageCount = (int) state[2];
- selectedIndex = (int) state[3];
- editIndex = (int) state[4];
- sortExpression = (string) state[5];
- sortDirection = (SortDirection) state[6];
- DataKeyNames = (string []) state [7];
+ selectedIndex = (int) state[2];
+ editIndex = (int) state[3];
+ sortExpression = (string) state[4];
+ sortDirection = (SortDirection) state[5];
+ DataKeyNames = (string []) state [6];
+ if (state [7] != null)
+ LoadDataKeyArrayState ((object []) state [7]);
+ if (state [8] != null)
+ ((IStateManager) OldEditValues).LoadViewState (state [8]);
}
protected internal override object SaveControlState ()
}
object bstate = base.SaveControlState ();
- return new object[] {
- bstate, pageIndex, pageCount, selectedIndex, editIndex, sortExpression, sortDirection, DataKeyNames
+ return new object [] {
+ bstate,
+ pageIndex,
+ selectedIndex,
+ editIndex,
+ sortExpression,
+ sortDirection,
+ DataKeyNames,
+ SaveDataKeyArrayState (),
+ (oldEditValues == null ? null : ((IStateManager)oldEditValues).SaveViewState ())
};
}
-
+
+ object [] SaveDataKeyArrayState ()
+ {
+ if (keys == null)
+ return null;
+
+ object [] state = new object [keys.Count];
+ for (int i = 0; i < keys.Count; i++) {
+ state [i] = ((IStateManager) keys [i]).SaveViewState ();
+ }
+ return state;
+ }
+
+ void LoadDataKeyArrayState (object [] state)
+ {
+ for (int i = 0; i < state.Length; i++) {
+ DataKey dataKey = new DataKey (new OrderedDictionary (DataKeyNames.Length), DataKeyNames);
+ ((IStateManager) dataKey).LoadViewState (state [i]);
+ DataKeyArrayList.Add (dataKey);
+ }
+ keys = new DataKeyArray (DataKeyArrayList);
+ }
+
protected override void TrackViewState()
{
base.TrackViewState();
protected override object SaveViewState()
{
- object[] states = new object [14];
+ object[] states = new object [12];
states[0] = base.SaveViewState();
states[1] = (columns == null ? null : ((IStateManager)columns).SaveViewState());
states[2] = (pagerSettings == null ? null : ((IStateManager)pagerSettings).SaveViewState());
states[8] = (selectedRowStyle == null ? null : ((IStateManager)selectedRowStyle).SaveViewState());
states[9] = (editRowStyle == null ? null : ((IStateManager)editRowStyle).SaveViewState());
states[10] = (emptyDataRowStyle == null ? null : ((IStateManager)emptyDataRowStyle).SaveViewState());
- states[11] = (keys == null ? null : ((IStateManager)keys).SaveViewState());
- states[12] = (oldEditValues == null ? null : ((IStateManager)oldEditValues).SaveViewState());
if (autoFieldProperties != null) {
object[] data = new object [autoFieldProperties.Length];
data [n] = ((IStateManager)autoFieldProperties [n]).SaveViewState ();
if (data [n] != null) allNull = false;
}
- if (!allNull) states [13] = data;
+ if (!allNull) states [11] = data;
}
for (int i = states.Length - 1; i >= 0; i--) {
object [] states = (object []) savedState;
- if (states[13] != null) {
- object[] data = (object[]) states [13];
+ if (states[11] != null) {
+ object[] data = (object[]) states [11];
autoFieldProperties = new AutoGeneratedFieldProperties [data.Length];
for (int n=0; n<data.Length; n++) {
IStateManager p = new AutoGeneratedFieldProperties ();
}
base.LoadViewState (states[0]);
- EnsureChildControls ();
if (states[1] != null) ((IStateManager)Columns).LoadViewState (states[1]);
if (states[2] != null) ((IStateManager)PagerSettings).LoadViewState (states[2]);
if (states[8] != null) ((IStateManager)SelectedRowStyle).LoadViewState (states[8]);
if (states[9] != null) ((IStateManager)EditRowStyle).LoadViewState (states[9]);
if (states[10] != null) ((IStateManager)EmptyDataRowStyle).LoadViewState (states[10]);
- if (states[11] != null) ((IStateManager)DataKeys).LoadViewState (states[11]);
- if (states[12] != null && oldEditValues != null) ((IStateManager)oldEditValues).LoadViewState (states[12]);
}
void ICallbackEventHandler.RaiseCallbackEvent (string eventArgs)
{
base.LoadControlState (savedState);
}
+
+ public void SetRequiresDataBinding (bool value)
+ {
+ RequiresDataBinding = value;
+ }
}
[Serializable]
}
+ [Test]
+ public void GridView_PageCount () {
+ Page p = new Page ();
+
+ PokerGridView gv = new PokerGridView ();
+ gv.PageSize = 3;
+ gv.AllowPaging = true;
+ p.Controls.Add (gv);
+
+ ObjectDataSource data = new ObjectDataSource ();
+ data.ID = "ObjectDataSource1";
+ data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName;
+ data.SelectMethod = "GetList";
+ p.Controls.Add (data);
+
+ gv.DataSourceID = "ObjectDataSource1";
+ gv.SetRequiresDataBinding (true);
+
+ Assert.AreEqual (0, gv.PageCount, "PageCount before binding");
+
+ gv.DataBind ();
+
+ Assert.AreEqual (2, gv.PageCount, "PageCount after binding");
+
+ PokerGridView copy = new PokerGridView ();
+ copy.LoadState (gv.SaveState ());
+
+ Assert.AreEqual (2, copy.PageCount, "PageCount from ViewState");
+ }
+
+ [Test]
+ public void GridView_DataKeys () {
+ Page p = new Page ();
+
+ PokerGridView gv = new PokerGridView ();
+ p.Controls.Add (gv);
+
+ ObjectDataSource data = new ObjectDataSource ();
+ data.TypeName = typeof (DataObject).AssemblyQualifiedName;
+ data.SelectMethod = "Select";
+ p.Controls.Add (data);
+
+ gv.DataSource = data;
+ gv.DataKeyNames = new string [] { "ID", "FName" };
+
+ DataKeyArray keys1 = gv.DataKeys;
+
+ Assert.AreEqual (0, keys1.Count, "DataKeys count before binding");
+
+ gv.DataBind ();
+
+ DataKeyArray keys2 = gv.DataKeys;
+ DataKeyArray keys3 = gv.DataKeys;
+
+ Assert.IsFalse (Object.ReferenceEquals (keys1, keys2), "DataKey returns the same instans");
+ Assert.IsTrue (Object.ReferenceEquals (keys2, keys3), "DataKey returns the same instans");
+
+ Assert.AreEqual (1, keys1.Count, "DataKeys count after binding");
+ Assert.AreEqual (1001, keys1 [0].Value, "DataKey.Value after binding");
+ Assert.AreEqual (2, keys1 [0].Values.Count, "DataKey.Values count after binding");
+ Assert.AreEqual (1001, keys1 [0].Values [0], "DataKey.Values[0] after binding");
+ Assert.AreEqual ("Mahesh", keys1 [0].Values [1], "DataKey.Values[1] after binding");
+
+ PokerGridView copy = new PokerGridView ();
+ object state = gv.DoSaveControlState ();
+ copy.DoLoadControlState (state);
+
+ DataKeyArray keys4 = copy.DataKeys;
+
+ Assert.AreEqual (1, keys4.Count, "DataKeys count from ControlState");
+ Assert.AreEqual (1001, keys4 [0].Value, "DataKey.Value from ControlState");
+ Assert.AreEqual (2, keys4 [0].Values.Count, "DataKey.Values count from ControlState");
+ Assert.AreEqual (1001, keys4 [0].Values [0], "DataKey.Values[0] from ControlState");
+ Assert.AreEqual ("Mahesh", keys4 [0].Values [1], "DataKey.Values[1] from ControlState");
+ }
+
// MSDN: The CreateDataSourceSelectArguments method is a helper method called by
// the GridView control to create the DataSourceSelectArguments object that
// contains the arguments passed to the data source. In this implementation,
Assert.AreEqual (SortDirection.Descending, e.SortDirection, "GridViewSortEventArgs.SortDirection");
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
+ [Test]
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
#endif
public void GridView_DataBind()
{
}
[Test]
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
#endif
public void GridView_CreateChildControls ()
{
}
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
-#endif\r
+ [Test]
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
+#endif
public void GridView_InitializePager ()
{
PokerGridView gv = new PokerGridView ();
pageIndexChanged = true;
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
-#endif\r
+ [Test]
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
+#endif
public void GridView_PerformDataBiding ()
{
PokerGridView gv = new PokerGridView ();
Assert.AreEqual (6, gv.Rows.Count, "PerformDataBiding_Rows");
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
-#endif\r
+ [Test]
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
+#endif
public void GridView_PrepareControlHierarchy ()
{
PokerGridView gv = new PokerGridView ();
Assert.AreEqual(-1 ,b.Render().IndexOf("table"), "RenderViewState");
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
- [Category ("NotWorking")]\r
-#endif\r
+ [Test]
+#if TARGET_JVM //BUG #6484
+ [Category ("NotWorking")]
+#endif
public void GridView_Render ()
{
PokerGridView b = new PokerGridView ();
HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Rendering");
}
- [Test]\r
-#if TARGET_JVM //BUG #6484\r
+ [Test]
+#if TARGET_JVM //BUG #6484
[Category ("NotWorking")]
#endif
public void GridView_RenderAllowPaging ()
[Test]
[Category ("NunitWeb")]
- [Category ("NotWorking")]
public void GridView_PostBackUpdateItem ()
{
WebTest t = new WebTest ();
fr.Controls["__EVENTARGUMENT"].Value = "Edit$0";
t.Request = fr;
- t.Run ();
+ pageHTML = t.Run ();
merged_data = t.UserData as string[];
if (merged_data == null) {
grid.ID = "Grid";
grid.AutoGenerateEditButton = true;
+
+ grid.AutoGenerateColumns = false;
+
+ BoundField field = new BoundField ();
+ field.DataField = "ID";
+ grid.Columns.Add (field);
+
+ field = new BoundField ();
+ field.DataField = "FName";
+ grid.Columns.Add (field);
+
+ field = new BoundField ();
+ field.DataField = "LName";
+ grid.Columns.Add (field);
+
grid.DataSourceID = "ObjectDataSource2";
p.Form.Controls.Add (ds);
p.Form.Controls.Add (grid);