[DefaultEventAttribute ("SelectedIndexChanged")]
[AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
- public class GridView: CompositeDataBoundControl, ICallbackEventHandler, ICallbackContainer, IPostBackEventHandler, IPostBackContainer
+ public class GridView: CompositeDataBoundControl, ICallbackEventHandler, ICallbackContainer, IPostBackEventHandler, IPostBackContainer, IPersistedSelector
{
Table table;
GridViewRowCollection rows;
readonly string[] emptyKeys = new string[0];
IEnumerator _dataEnumerator;
- private static readonly object PageIndexChangedEvent = new object();
- private static readonly object PageIndexChangingEvent = new object();
- private static readonly object RowCancelingEditEvent = new object();
- private static readonly object RowCommandEvent = new object();
- private static readonly object RowCreatedEvent = new object();
- private static readonly object RowDataBoundEvent = new object();
- private static readonly object RowDeletedEvent = new object();
- private static readonly object RowDeletingEvent = new object();
- private static readonly object RowEditingEvent = new object();
- private static readonly object RowUpdatedEvent = new object();
- private static readonly object RowUpdatingEvent = new object();
- private static readonly object SelectedIndexChangedEvent = new object();
- private static readonly object SelectedIndexChangingEvent = new object();
- private static readonly object SortedEvent = new object();
- private static readonly object SortingEvent = new object();
+ static readonly object PageIndexChangedEvent = new object();
+ static readonly object PageIndexChangingEvent = new object();
+ static readonly object RowCancelingEditEvent = new object();
+ static readonly object RowCommandEvent = new object();
+ static readonly object RowCreatedEvent = new object();
+ static readonly object RowDataBoundEvent = new object();
+ static readonly object RowDeletedEvent = new object();
+ static readonly object RowDeletingEvent = new object();
+ static readonly object RowEditingEvent = new object();
+ static readonly object RowUpdatedEvent = new object();
+ static readonly object RowUpdatingEvent = new object();
+ static readonly object SelectedIndexChangedEvent = new object();
+ static readonly object SelectedIndexChangingEvent = new object();
+ static readonly object SortedEvent = new object();
+ static readonly object SortingEvent = new object();
// Control state
int pageIndex;
}
}
+ [BrowsableAttribute(false)]
+ public IAutoFieldGenerator ColumnsGenerator {
+ get;
+ set;
+ }
+
[DefaultValueAttribute (null)]
[WebCategoryAttribute ("Data")]
[TypeConverter (typeof(StringArrayConverter))]
return null;
}
}
+
+ [MonoTODO]
+ [BrowsableAttribute(false)]
+ public virtual DataKey SelectedPersistedDataKey {
+ get; set;
+ }
+
+ [MonoTODO]
+ DataKey IPersistedSelector.DataKey {
+ get { return SelectedPersistedDataKey; }
+ set { SelectedPersistedDataKey = value; }
+ }
[BindableAttribute (true)]
[DefaultValueAttribute (-1)]
protected virtual ICollection CreateColumns (PagedDataSource dataSource, bool useDataSource)
{
+ bool autoGenerate = AutoGenerateColumns;
+
+ if (autoGenerate) {
+ IAutoFieldGenerator fieldGenerator = ColumnsGenerator;
+ if (fieldGenerator != null)
+ return fieldGenerator.GenerateFields (this);
+ }
+
ArrayList fields = new ArrayList ();
if (AutoGenerateEditButton || AutoGenerateDeleteButton || AutoGenerateSelectButton) {
fields.AddRange (Columns);
- if (AutoGenerateColumns) {
+ if (autoGenerate) {
if (useDataSource)
autoFieldProperties = CreateAutoFieldProperties (dataSource);
_dataEnumerator = null;
ICollection fieldCollection = CreateColumns (dataSource, dataBinding);
- DataControlField[] fields = new DataControlField [fieldCollection.Count];
+ int fieldCount = fieldCollection.Count;
+ DataControlField dcf;
+ DataControlField[] fields = new DataControlField [fieldCount];
fieldCollection.CopyTo (fields, 0);
-
- foreach (DataControlField field in fields) {
- field.Initialize (AllowSorting, this);
+
+ for (int i = 0; i < fieldCount; i++) {
+ dcf = fields [i];
+ dcf.Initialize (AllowSorting, this);
if (EnableSortingAndPagingCallbacks)
- field.ValidateSupportsCallback ();
+ dcf.ValidateSupportsCallback ();
}
bool skip_first = false;
}
// Main table creation
+ Table mainTable = ContainedTable;
while (skip_first || enumerator.MoveNext ()) {
skip_first = false;
object obj = enumerator.Current;
if (list.Count == 0) {
if (createPager && (PagerSettings.Position == PagerPosition.Top || PagerSettings.Position == PagerPosition.TopAndBottom)) {
- topPagerRow = CreatePagerRow (fields.Length, dataSource);
+ topPagerRow = CreatePagerRow (fieldCount, dataSource);
OnRowCreated (new GridViewRowEventArgs (topPagerRow));
- ContainedTable.Rows.Add (topPagerRow);
+ mainTable.Rows.Add (topPagerRow);
if (dataBinding) {
topPagerRow.DataBind ();
OnRowDataBound (new GridViewRowEventArgs (topPagerRow));
GridViewRow headerRow = CreateRow (-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
InitializeRow (headerRow, fields);
OnRowCreated (new GridViewRowEventArgs (headerRow));
- ContainedTable.Rows.Add (headerRow);
+ mainTable.Rows.Add (headerRow);
if (dataBinding) {
headerRow.DataBind ();
OnRowDataBound (new GridViewRowEventArgs (headerRow));
list.Add (row);
InitializeRow (row, fields);
OnRowCreated (new GridViewRowEventArgs (row));
- ContainedTable.Rows.Add (row);
+ mainTable.Rows.Add (row);
if (dataBinding) {
- row.DataBind ();
- OnRowDataBound (new GridViewRowEventArgs (row));
+ row.DataBind ();
if (EditIndex == row.RowIndex)
oldEditValues = new DataKey (GetRowValues (row, true, true));
DataKeyArrayList.Add (new DataKey (CreateRowDataKey (row), DataKeyNames));
+ OnRowDataBound (new GridViewRowEventArgs (row));
}
}
if (list.Count == 0) {
- GridViewRow emptyRow = CreateEmptyrRow (fields.Length);
+ GridViewRow emptyRow = CreateEmptyrRow (fieldCount);
if (emptyRow != null) {
OnRowCreated (new GridViewRowEventArgs (emptyRow));
- ContainedTable.Rows.Add (emptyRow);
+ mainTable.Rows.Add (emptyRow);
if (dataBinding) {
emptyRow.DataBind ();
OnRowDataBound (new GridViewRowEventArgs (emptyRow));
GridViewRow footerRow = CreateRow (-1, -1, DataControlRowType.Footer, DataControlRowState.Normal);
InitializeRow (footerRow, fields);
OnRowCreated (new GridViewRowEventArgs (footerRow));
- ContainedTable.Rows.Add (footerRow);
+ mainTable.Rows.Add (footerRow);
if (dataBinding) {
footerRow.DataBind ();
OnRowDataBound (new GridViewRowEventArgs (footerRow));
}
if (createPager && (PagerSettings.Position == PagerPosition.Bottom || PagerSettings.Position == PagerPosition.TopAndBottom)) {
- bottomPagerRow = CreatePagerRow (fields.Length, dataSource);
+ bottomPagerRow = CreatePagerRow (fieldCount, dataSource);
OnRowCreated (new GridViewRowEventArgs (bottomPagerRow));
- ContainedTable.Rows.Add (bottomPagerRow);
+ mainTable.Rows.Add (bottomPagerRow);
if (dataBinding) {
bottomPagerRow.DataBind ();
OnRowDataBound (new GridViewRowEventArgs (bottomPagerRow));
base.DataBind ();
keys = new DataKeyArray (DataKeyArrayList);
+
+ GridViewRow row = HeaderRow;
+ if (row != null)
+ row.Visible = ShowHeader;
+
+ row = FooterRow;
+ if (row != null)
+ row.Visible = ShowFooter;
}
protected internal override void PerformDataBinding (IEnumerable data)
{
if (table == null)
return;
-
+
table.Caption = Caption;
table.CaptionAlign = CaptionAlign;
table.CopyBaseAttributes (this);
void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
{
+ ValidateEvent (UniqueID, eventArgument);
RaisePostBackEvent (eventArgument);
}
if (causesValidation && Page != null && !Page.IsValid)
return;
- currentEditOldValues = OldEditValues.Values;
-
- currentEditRowKeys = DataKeys [rowIndex].Values;
+ currentEditOldValues = CopyOrderedDictionary (OldEditValues.Values);
+ currentEditRowKeys = CopyOrderedDictionary (DataKeys [rowIndex].Values);
currentEditNewValues = GetRowValues (row, false, false);
GridViewUpdateEventArgs args = new GridViewUpdateEventArgs (rowIndex, currentEditRowKeys, currentEditOldValues, currentEditNewValues);
view.Update (currentEditRowKeys, currentEditNewValues, currentEditOldValues, new DataSourceViewOperationCallback (UpdateCallback));
}
+ static IOrderedDictionary CopyOrderedDictionary (IOrderedDictionary sourceDic) {
+ OrderedDictionary copyDic = new OrderedDictionary ();
+ foreach (object key in sourceDic.Keys) {
+ copyDic.Add (key, sourceDic [key]);
+ }
+ return copyDic;
+ }
+
bool UpdateCallback (int recordsAffected, Exception exception)
{
GridViewUpdatedEventArgs dargs = new GridViewUpdatedEventArgs (recordsAffected, exception, currentEditRowKeys, currentEditOldValues, currentEditNewValues);
public virtual void DeleteRow (int rowIndex)
{
GridViewRow row = Rows [rowIndex];
- currentEditRowKeys = DataKeys [rowIndex].Values;
+ currentEditRowKeys = CopyOrderedDictionary (DataKeys [rowIndex].Values);
currentEditNewValues = GetRowValues (row, true, true);
GridViewDeleteEventArgs args = new GridViewDeleteEventArgs (rowIndex, currentEditRowKeys, currentEditNewValues);
protected virtual string GetCallbackScript (IButtonControl control, string argument)
{
- if (EnableSortingAndPagingCallbacks)
+ if (EnableSortingAndPagingCallbacks) {
+ Page page = Page;
+ if (page != null)
+ page.ClientScript.RegisterForEventValidation (UniqueID, argument);
return "javascript:GridView_ClientEvent (\"" + ClientID + "\",\"" + control.CommandName + "$" + control.CommandArgument + "\"); return false;";
- else
+ } else
return null;
}
protected internal override void Render (HtmlTextWriter writer)
{
PrepareControlHierarchy ();
-
if (EnableSortingAndPagingCallbacks)
writer.AddAttribute (HtmlTextWriterAttribute.Id, ClientID + "_div");
writer.RenderBeginTag (HtmlTextWriterTag.Div);