Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Building Controls > overriding GridView.OnRowDeleting - can call registered event handlers

Reply
Thread Tools

overriding GridView.OnRowDeleting - can call registered event handlers

 
 
Allen Chen [MSFT]
Guest
Posts: n/a
 
      11-07-2008
Hi,

Have you sent the demo to me?

Regards,
Allen Chen
Microsoft Online Support
--------------------
| From: "TS" <>
| References: <#>
<#>
<>
<A3AFHn$>
<>
<iuX$>
<>
| Subject: Re: overriding GridView.OnRowDeleting - can call registered
event handlers
| Date: Wed, 29 Oct 2008 11:08:23 -0500
| Lines: 1559
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
| X-RFC2646: Format=Flowed; Response
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
| Message-ID: <>
| Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| NNTP-Posting-Host: 168.38.106.113
| Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP05.phx.gbl
| Xref: TK2MSFTNGHUB02.phx.gbl
microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1147
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
|
| I see now that all the events get raised when I click one of the grid's
| buttons to fire Edit, Update, etc. So on default data binding of the
grid,
| on just load of the page, the events are not getting raised. Sounds like
| something is missing from the control's code:
|
| using System;
| using System.Collections;
| using System.Collections.Specialized;
| using System.Collections.Generic;
| using System.Web.UI.WebControls;
| using System.Web.UI;
| using System.Reflection;
| using MyPrj.SNF.Model;
| using MyPrj.SNF.Application;
| using System.Data;
| using System.Web;
| /// <summary>
| /// Summary description for EditableGrid
| /// </summary>
|
| namespace MyPrj.SNF.Web.Control
| {
|
| public class EditableGrid : System.Web.UI.WebControls.GridView
| {
| public EditableGrid()
| {
| //
| // TODO: Add constructor logic here
| //
| ShowFooter = true;
| ShowHeader = true;
| ShowFooterWhenEmpty = true;
| ShowHeaderWhenEmpty = true;
| ShowGridViewEditButtons = true;
| GridPostbackEvent = "GridReload";
| EmptyDataText = "No Records Found";
| EnableViewState = false;
| SetupStyleAndBehaviour();
| }
|
| #region Events
| #region protected override void OnLoad(EventArgs e)
| protected override void OnLoad(EventArgs e)
| {
| base.OnLoad(e);
| #region Add Delegates for all grid events
| // Add delegates instead of overriding for all the grid events that
dont
| need to call base's implementation, otherwise
| // every aspx page would have to have a delegate for each grid event
that
| was supported for that grid on that page
|
| // Note: do in OnLoad so that the individual aspx pages can also do
this
| in their OnLoad and have their events
| // run first so that the BypassGridEvent flag can be set to true to
| bypass execution here.
| this.RowCommand += new
| GridViewCommandEventHandler(EditableGrid_RowComman d);
| this.RowEditing += new
GridViewEditEventHandler(EditableGrid_RowEditing);
| this.RowCancelingEdit += new
| GridViewCancelEditEventHandler(EditableGrid_RowCan celingEdit);
| this.RowUpdating += new
| GridViewUpdateEventHandler(EditableGrid_RowUpdatin g);
| this.RowDeleting += new
| GridViewDeleteEventHandler(EditableGrid_RowDeletin g);
| this.Sorting += new GridViewSortEventHandler(EditableGrid_Sorting);
| this.PageIndexChanged += new
EventHandler(EditableGrid_PageIndexChanged);
| #endregion
| }
| #endregion
| #region protected override int CreateChildControls(IEnumerable
dataSource,
| bool dataBinding)
| protected override int CreateChildControls(IEnumerable dataSource, bool
| dataBinding)
| {
| int rows = base.CreateChildControls(dataSource, dataBinding);
|
| // no data rows created, create empty table if enabled
| if (rows == 0 && (ShowFooterWhenEmpty || ShowHeaderWhenEmpty))
| {
| // create the table
| Table table = CreateChildTable();
| Controls.Clear();
| Controls.Add(table);
| DataControlField[] fields;
| if (AutoGenerateColumns)
| {
| PagedDataSource source = new PagedDataSource();
| source.DataSource = dataSource;
| ICollection autoGeneratedColumns =
CreateColumns(source,
| true);
| fields = new
| DataControlField[autoGeneratedColumns.Count];
| autoGeneratedColumns.CopyTo(fields, 0);
| }
| else
| {
| fields = new DataControlField[Columns.Count];
| Columns.CopyTo(fields, 0);
| }
|
| TableRowCollection newRows = table.Rows;
| if (ShowHeaderWhenEmpty)
| {
| // create a new header row
| _headerRow = CreateRow(-1, -1,
| DataControlRowType.Header, DataControlRowState.Normal);
| InitializeRow(_headerRow, fields, newRows);
| }
|
| //// create the empty row
| GridViewRow emptyRow = new GridViewRow(-1, -1,
| DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
| TableCell cell = new TableCell();
| cell.ColumnSpan = fields.Length;
| cell.Width = Unit.Percentage(100);
| //
| if (EmptyDataTemplate != null)
| {
| EmptyDataTemplate.InstantiateIn(cell);
| }
| else if (!string.IsNullOrEmpty(EmptyDataText))
| //else if (!string.IsNullOrEmpty(EmptyDataText) &&
| MyPrj.SNF.Web.Utils.Utils.InReadMode())
| {
| cell.Controls.Add(new LiteralControl(EmptyDataText));
| }
| emptyRow.Cells.Add(cell);
| GridViewRowEventArgs e = new
GridViewRowEventArgs(emptyRow);
| OnRowCreated(e);
| newRows.Add(emptyRow);
| emptyRow.DataBind();
| OnRowDataBound(e);
| emptyRow.DataItem = null;
| if (ShowFooterWhenEmpty &&
| !MyPrj.SNF.Web.Utils.Utils.InReadMode())
| {
| // create footer row
| _footerRow = CreateRow(-1, -1,
| DataControlRowType.Footer, DataControlRowState.Normal);
| InitializeRow(_footerRow, fields, newRows);
| }
| }
| return rows;
| }
| #endregion
| #region protected override void Render()
| protected override void Render(HtmlTextWriter writer)
| {
| if (DataSource != null && GridMode == GridViewMode.Editable)
| {
| IList listRows = DataSource as IList;
| int rowIndex = 0;
| string itemCountHiddenField = "<input type=\"hidden\"
| name=\"" + this.PropertyName + "Count" + "\" id=\"" + this.PropertyName +
| "Count" + "\" value=\"" + listRows.Count.ToString() + "\" />";
| writer.WriteLine(itemCountHiddenField);
| foreach (MyPrj.SNF.Model.IDomainObject domainObject in
| listRows)
| {
| foreach (GridViewColumnMetaData columnMetaData in
| MetaData.Columns)
| {
| object propValue =
| Utils.Utils.GetPropertyValue(domainObject, columnMetaData.PropertyName);
| string propertyValue = string.Empty;
| if (propValue != null)
| propertyValue = propValue.ToString();
| // Replace line breaks with a single space
| // Escape Double Quotes & backslashes so the
value
| can be put safely into the array and hidden fields
| propertyValue = propertyValue.Replace("\r\n", "
| ").Replace(@"\", @"\\").Replace(@"""", "\\\"");
|
|
| string hiddenFieldId = (PropertyName + "_" +
| rowIndex + "_" + columnMetaData.PropertyName);
| string hiddenFieldToRender = "<input
type=\"hidden\"
| name=\"" + hiddenFieldId + "\" id=\"" + hiddenFieldId + "\" value=\"" +
| propertyValue + "\" />";
| writer.WriteLine(hiddenFieldToRender);
| }
| rowIndex++;
| }
| }
| base.Render(writer);
| RenderHiddenFieldsForActions();
| }
| #endregion
| #region protected override void LoadControlState()
| /// <summary>
| /// Manages the Sort information.
| /// </summary>
| /// <param name="savedState"></param>
| protected override void LoadControlState(object savedState)
| {
| object[] states = (object[])savedState;
| base.LoadControlState(states[0]);
|
| CSSortExpression = (string)states[1];
| CSSortDirection =
| (MyPrj.SNF.Application.SortDirection)states[2];
| }
| #endregion
| #region protected override object SaveControlState()
| protected override object SaveControlState()
| {
| object[] states = new object[3];
| states[0] = base.SaveControlState();
|
| states[1] = CSSortExpression;
| states[2] = CSSortDirection;
|
| return states;
| }
| #endregion
| protected override void OnDataBinding(EventArgs e)
| {
| DataSource = Utils.Utils.GetPropertyValue(PropertyName) as
| IList;
| addColumns();
| base.OnDataBinding(e);
| }
| protected override void OnRowCreated(GridViewRowEventArgs e)
| {
| if (e.Row.DataItem != null && e.Row.RowType ==
| DataControlRowType.DataRow)
| {
| object isRowDeleted =
| Utils.Utils.GetPropertyValue((IDomainObject)e.Row. DataItem,
| "HasBeenDeleted");
| addRowEvents(e.Row, (bool)isRowDeleted);
| }
|
| #region Add footer row events
| if (MetaData != null && EditIndex < 0 && e.Row.RowType ==
| DataControlRowType.Footer)
| {
| foreach (GridViewActionInfo actionInfo in MetaData.Actions)
| {
| System.Web.UI.WebControls.LinkButton lb = new
| System.Web.UI.WebControls.LinkButton();
| if (actionInfo.EventLocation ==
| GridViewActionInfo.EventLocationCode.FooterRow)
| {
| lb.Text = actionInfo.DisplayName;
| lb.ID = "lnk" + this.ID + actionInfo.EventName;
| lb.CommandName = actionInfo.CommandType.ToString();
| lb.CausesValidation = actionInfo.CausesValidation;
| lb.ValidationGroup = this.ID;
| lb.OnClientClick = getGridEventOnClickString(e.Row, lb,
| true, 0, actionInfo.CausesValidation,
actionInfo.ClientSideEventHandlerName,
| actionInfo.ActionParameters);
| lb.Attributes.Add("href", "#");
| addActionCell(e.Row, lb);
| TableHeaderCell c = new TableHeaderCell();
| c.Text = "";
| HeaderRow.Cells.Add(c);
| }
| }
| }
| #endregion
|
| base.OnRowCreated(e);
| }
| #region Delegated Events
|
| #region void EditableGrid_RowEditing(object sender,
GridViewEditEventArgs
| e)
| void EditableGrid_RowEditing(object sender, GridViewEditEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| this.EditIndex = e.NewEditIndex;
| this.DataBind();
| }
| #endregion
| #region void EditableGrid_RowDeleting(object sender,
| GridViewDeleteEventArgs e)
| void EditableGrid_RowDeleting(object sender, GridViewDeleteEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| this.EditIndex = -1;
| Type domainObjectType = Type.GetType(DomainObjectName);
| object objItems = Activator.CreateInstance(domainObjectType);
| Array dataSourceItems = DataSource as Array;
| objItems = dataSourceItems.GetValue(e.RowIndex);
| Array updatedItems = getUpdatedItems((IList)DataSource, objItems,
| domainObjectType, e.RowIndex, "HasBeenDeleted", true);
| setPropertyArrayValue(updatedItems);
| this.DataSource = updatedItems as IList;
| this.DataBind();
| }
| #endregion
| #region void EditableGrid_RowUpdating(object sender,
| GridViewUpdateEventArgs e)
| void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| this.EditIndex = -1;
| Type domainObjectType = Type.GetType(DomainObjectName);
| object objItems = Activator.CreateInstance(domainObjectType);
| foreach (System.Web.UI.Control c in
| this.Rows[e.RowIndex].Controls)
| {
| //First level is table cell level.. we need to go one
more
| level..
| if (c is DataControlFieldCell && c.Controls.Count > 0)
| {
| System.Web.UI.Control ec = c.Controls[0] as
| System.Web.UI.Control;
| setEachControlValues(ec, objItems);
| }
| }
|
| Array updatedItems = getUpdatedItems((IList)DataSource,
| objItems, domainObjectType, e.RowIndex, "HasBeenEdited", true);
| setPropertyArrayValue(updatedItems);
| this.DataSource = updatedItems as IList;
| this.DataBind();
| }
| #endregion
| #region void EditableGrid_RowCommand(object sender,
| GridViewCommandEventArgs e)
| void EditableGrid_RowCommand(object sender, GridViewCommandEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| #region -- insert new row code here
|
| if (e.CommandName.Equals("Add"))
| {
| //Here we have to get each item value from the controls.
| Type domainObjectType = Type.GetType(DomainObjectName);
| object objItems =
| Activator.CreateInstance(domainObjectType);
| foreach (System.Web.UI.Control c in
this.FooterRow.Controls)
| {
| //First level is table cell level.. we
| //need to go one more level..
| if (c.GetType().Name == "DataControlFieldCell" &&
| c.Controls.Count > 0)
| {
| System.Web.UI.Control ec = c.Controls[0] as
| System.Web.UI.Control;
| setEachControlValues(ec, objItems);
| }
| }
|
| Array addedItems = getAddedItems((IList)DataSource,
| objItems);
| setPropertyArrayValue(addedItems);
| this.DataSource = addedItems as IList;
| this.DataBind();
| }
|
| #endregion
|
| #region -- restore rows here
|
| if (e.CommandName.Equals("Restore"))
| {
| this.EditIndex = -1;
| Type domainObjectType = Type.GetType(DomainObjectName);
| object objItems =
| Activator.CreateInstance(domainObjectType);
| Array dataSourceItems = DataSource as Array;
| objItems =
| dataSourceItems.GetValue(Convert.ToInt32(e.Command Argument));
| Array updatedItems = getUpdatedItems((IList)DataSource,
| objItems, domainObjectType, Convert.ToInt32(e.CommandArgument),
| "HasBeenDeleted", false);
| setPropertyArrayValue(updatedItems);
| this.DataSource = updatedItems as IList;
| this.DataBind();
| }
|
| #endregion
| }
| #endregion
| #region void EditableGrid_RowCancelingEdit(object sender,
| GridViewCancelEditEventArgs e)
| void EditableGrid_RowCancelingEdit(object sender,
| GridViewCancelEditEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| this.EditIndex = -1;
| this.DataBind();
| }
| #endregion
| #region void EditableGrid_Sorting(object sender,
| GridViewSortEventArgs e)
| void EditableGrid_Sorting(object sender, GridViewSortEventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| MyPrj.SNF.Web.Controller.RequestContext CurrentRequestContext
=
| Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
| MyPrj.SNF.Web.Controller.RequestContext;
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| CurrentRequestContext.CurrentControllerData;
|
| if (CSSortExpression !=
| ((GridViewSortEventArgs)e).SortExpression)
| CSSortDirection =
| MyPrj.SNF.Application.SortDirection.Ascending;
| else
| CSSortDirection = (CSSortDirection ==
| MyPrj.SNF.Application.SortDirection.Descending) ?
| MyPrj.SNF.Application.SortDirection.Ascending :
| MyPrj.SNF.Application.SortDirection.Descending;
|
| CSSortExpression = ((GridViewSortEventArgs)e).SortExpression;
| Array.Sort(DataSource as Array, new
| MyPrj.SNF.Application.ClassComparer(CSSortExpressi on, CSSortDirection));
| this.DataBind();
| }
| #endregion
| #region void EditableGrid_PageIndexChanged(object sender,
EventArgs
| e)
| void EditableGrid_PageIndexChanged(object sender, EventArgs e)
| {
| if (BypassGridEvent)
| return;
|
| bool displayLastPage = false;
| //try
| //{
| if (((GridViewPageEventArgs)e).NewPageIndex > -1)
| PageIndex = ((GridViewPageEventArgs)e).NewPageIndex;
| else
| displayLastPage = true;
| IList list = DataSource as IList;
| if (displayLastPage)
| PageIndex = (int)Math.Ceiling(((double)list.Count /
| PageSize)) - 1;
| this.DataBind();
| //}
| //catch (Exception expGeneral)
| //{
| // throw;
| //}
| }
|
| #endregion
|
| #endregion
| #endregion
|
| #region void addColumns()
|
| private void addColumns()
| {
| if (MetaData == null)
| MetaData =
GridViewMetaData.GetGridViewMetaData(MetaDataId);
| Columns.Clear();
|
| #region - all the controls
|
| foreach (GridViewColumnMetaData columnMetaData in
| MetaData.Columns)
| {
|
| if (columnMetaData.IsDisplayed)
| {
| TemplateField columnField = new TemplateField();
| columnField.HeaderText = columnMetaData.HeaderText;
| if (columnMetaData.IsSortable)
| columnField.SortExpression =
| columnMetaData.SortPropertyName;
| columnField.ItemStyle.HorizontalAlign =
| columnMetaData.HorizontalAlign;
| columnField.ItemStyle.Width = columnMetaData.Width;
|
| if (GridMode == GridViewMode.Editable)
| {
| columnField.ItemTemplate = new
| GridViewTemplate(ListItemType.Item, MetaData, columnMetaData, this.ID);
| columnField.EditItemTemplate = new
| GridViewTemplate(ListItemType.EditItem, MetaData, columnMetaData,
this.ID);
|
| if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
| this.EditIndex < 0)
| {
| columnField.FooterTemplate = new
| GridViewTemplate(ListItemType.Footer, MetaData, columnMetaData, this.ID);
| }
| }
| //Add the newly created bound field to the GridView.
| Columns.Add(columnField);
| }
| }
|
| #endregion
|
| #region ------- add check box to each row if render selection
is
| specified
|
|
| if ((MetaData.ShowSelectionInReadMode &&
| MyPrj.SNF.Web.Utils.Utils.InReadMode()) ||
| (MetaData.ShowSelectionInEditableMode &&
| !MyPrj.SNF.Web.Utils.Utils.InReadMode()))
| {
| GridViewColumnMetaData gvMetaData = new
| GridViewColumnMetaData(MetaData.SelectionPropertyN ame, "Select", false);
| gvMetaData.ColumnType = "DomainObjectSelection";
| TemplateField selectionField = new TemplateField();
| selectionField.ItemTemplate = new
| GridViewTemplate(ListItemType.EditItem, MetaData, gvMetaData, this.ID);
| Columns.Add(selectionField);
| }
|
| #endregion
|
| }
|
|
|
| #endregion
|
| #region private string getControlIndex()
| private string getControlIndex(bool isFooterRow, int dataRowIndex)
| {
| //This is not a real code......????
| //what do i do if there is no option..
| string controlIndex = "";
| int startCount = 0;
|
| if (isFooterRow)
| {
| startCount = 3;
| if (Rows.Count > 1)
| startCount = 3 + (Rows.Count - 1);
|
| if (startCount < 10)
| controlIndex = "$ctl0" + startCount.ToString() + "$";
| else
| controlIndex = "$ctl" + startCount.ToString() + "$";
| }
| else
| {
| startCount = 2 + dataRowIndex;
| if (startCount < 10)
| controlIndex = "$ctl0" + startCount.ToString() + "$";
| else
| controlIndex = "$ctl" + startCount.ToString() + "$";
| }
|
| return controlIndex;
| }
| #endregion
|
| #region private void addRowEvents(GridViewRow gr)
| private void addRowEvents(GridViewRow gr, bool isDeleted)
| {
|
| System.Web.UI.WebControls.LinkButton lb = new
| System.Web.UI.WebControls.LinkButton();
| if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
| ShowGridViewEditButtons)
| {
|
| #region //first add the data row events
|
| foreach (GridViewActionInfo actionInfo in
MetaData.Actions)
| {
| if (actionInfo.EventLocation ==
| GridViewActionInfo.EventLocationCode.DataRow)
| {
| lb = new System.Web.UI.WebControls.LinkButton();
| lb.ID = "lnk" + this.ID + actionInfo.EventName;
| lb.Text = actionInfo.DisplayName;
| lb.CommandName =
actionInfo.CommandType.ToString();
| lb.ValidationGroup = this.ID;
| lb.CausesValidation = actionInfo.CausesValidation;
| lb.Attributes.Add("href", "#");
| lb.OnClientClick = getGridEventOnClickString(gr,
lb,
| false, gr.RowIndex, actionInfo.CausesValidation,
| actionInfo.ClientSideEventHandlerName, actionInfo.ActionParameters);
|
|
| if (actionInfo.CommandType ==
| GridViewActionInfo.CommandTypeCode.SNF)
| lb.OnClientClick =
| getSNFOnclickString(actionInfo, gr);
| else if (isDeleted && actionInfo.CommandType ==
| GridViewActionInfo.CommandTypeCode.Restore)
| {
| //If its deleted row then just show the
restore
| event and return
| removeActionCell(gr);
| //set the deleted row css class
| gr.CssClass = RemovedItemCssClass;
| lb.CommandArgument = gr.RowIndex.ToString();
| addActionCell(gr, lb);
| addEmptyCell(gr);
| return;
| }
|
|
| bool addThis = false;
| if (EditIndex == gr.RowIndex &&
| (actionInfo.CommandType == GridViewActionInfo.CommandTypeCode.Update ||
| actionInfo.CommandType ==
| GridViewActionInfo.CommandTypeCode.Cancel))
| addThis = true;
| else if (EditIndex < 0 && EditIndex !=
gr.RowIndex
| && (actionInfo.CommandType != GridViewActionInfo.CommandTypeCode.Update &&
| actionInfo.CommandType !=
| GridViewActionInfo.CommandTypeCode.Cancel && actionInfo.CommandType !=
| GridViewActionInfo.CommandTypeCode.Restore))
| addThis = true;
|
| if (addThis)
| addActionCell(gr, lb);
|
| }
| }
|
| #endregion
|
|
| #region //Add header row for the event
|
| TableHeaderCell c = new TableHeaderCell();
| c.Text = "";
| HeaderRow.Cells.Add(c);
|
| #endregion
|
| }
| }
| #endregion
|
| #region protected void RenderHiddenFieldsForActions()
| protected void RenderHiddenFieldsForActions()
| {
| if (MetaData == null || MetaData.Actions == null ||
| MetaData.Actions.Count < 1 || DataSource == null ||
| ((IList)DataSource).Count == 0)
| return;
|
| Hashtable hiddenFieldIds = new Hashtable();
| foreach (GridViewActionInfo actionInfo in MetaData.Actions)
| {
| if (actionInfo.ActionParameters != null)
| {
| foreach (string argumentName in
| actionInfo.ActionParameters.AllKeys)
| {
| if
| (!hiddenFieldIds.ContainsKey(actionInfo.ActionPara meters[argumentName]))
|
hiddenFieldIds[actionInfo.ActionParameters[argumentName]]
| = null;
| }
| }
| }
| foreach (string hiddenFieldId in hiddenFieldIds.Keys)
| {
| // Add the Hidden Field only if the page doesn't already
| contain a control with same ID
| if (!Utils.Utils.IsControlOnPage(Page, hiddenFieldId))
| {
| //For ajax postback we will have to register the
hidden
| fields
| ScriptManager sm = ScriptManager.GetCurrent(Page);
| if (sm != null && sm.IsInAsyncPostBack)
|
System.Web.UI.ScriptManager.RegisterHiddenField(th is,
| hiddenFieldId, string.Empty);
| else
|
Page.ClientScript.RegisterHiddenField(hiddenFieldI d,
| string.Empty);
| }
| }
| }
| #endregion
|
| #region private string getSNFOnclickString(GridViewActionInfo
| actionInfo,GridViewRow gr)
| private string getSNFOnclickString(GridViewActionInfo actionInfo,
| GridViewRow gr)
| {
| System.Text.StringBuilder sb = new
System.Text.StringBuilder();
| if (actionInfo.ActionParameters != null &&
| actionInfo.ActionParameters.Count > 0)
| {
| Type gridType = gr.DataItem.GetType();
| List<string> parameters = new List<string>();
| foreach (string propertyName in actionInfo.ActionParameters.AllKeys)
| {
| if (actionInfo.ActionParameters[propertyName] != null)
| {
| string controlId =
| actionInfo.ActionParameters[propertyName];
| object propertyValue =
| gridType.GetProperty(propertyName).GetValue(gr.Dat aItem, null);
| if (PropertyUtilities.IsNullValue(propertyValue))
| propertyValue = string.Empty;
|
| parameters.Add(controlId + "~" + propertyValue);
| }
| }
| object[] args = new object[] { "this",
actionInfo.EventName,
| actionInfo.ClientSideEventHandlerName, string.Join("-",
| parameters.ToArray()), gr.RowIndex };
| return
|
string.Format("processGridViewEvent(\"{0}\",\"{1}\ ",\"{2}\",\"{3}\",\"{4}\")
",
| args);
| }
| return string.Empty;
| }
| #endregion
|
| #region private string getGridEventOnClickString()
| private string getGridEventOnClickString(GridViewRow gridRow,
| System.Web.UI.WebControls.LinkButton lb, bool isFooterRow, int
dataRowIndex,
| bool causeValidation, string clientSideEventHandlerName,
NameValueCollection
| actionParameters)
| {
| string validationGroup = "donotValidate";
| if (causeValidation)
| validationGroup = ID;
|
| string uniqId = this.UniqueID + getControlIndex(isFooterRow,
| dataRowIndex) + lb.UniqueID;
| if (!string.IsNullOrEmpty(clientSideEventHandlerName) )
| {
| List<string> parameters = new List<string>();
| parameters.Add("''");
| if (actionParameters != null && actionParameters.Count > 0)
| {
| parameters.Clear();
| Type gridType = gridRow.DataItem.GetType();
| foreach (string propertyName in actionParameters.AllKeys)
| {
| if (actionParameters[propertyName] != null)
| {
| string controlId = actionParameters[propertyName];
| object propertyValue =
| gridType.GetProperty(propertyName).GetValue(gridRo w.DataItem, null);
| if (PropertyUtilities.IsNullValue(propertyValue))
| propertyValue = string.Empty;
| parameters.Add(controlId + "~" + propertyValue);
| }
| }
| }
|
| return string.Format("return
|
handleThenFireButtonEvent(\"{0}\",\"{1}\",\"{2}\", {3},\"{4}\",\"{5}\",\"{6}\
",\"{7}\",\"{8}\")",
| "this", GridPostbackEvent, clientSideEventHandlerName, "true",
| string.Join("-", parameters.ToArray()), validationGroup, uniqId,
| lb.CommandArgument, UpdatePanelId);
| }
| object[] args = new object[] { };
| return string.Format("return
|
validateAndFireButtonEventGroup(\"{0}\",\"{1}\",\" {2}\",\"{3}\",\"{4}\",\"{5
}\")",
| "this", GridPostbackEvent, validationGroup, uniqId, lb.CommandArgument,
| UpdatePanelId);
| }
| #endregion
|
| #region private TableRow addActionCell()
| private void addActionCell(GridViewRow gr,
| System.Web.UI.WebControls.LinkButton lb)
| {
| System.Web.UI.WebControls.TableCell tc = new TableCell();
| tc.Controls.Add(lb);
| ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
| }
| #endregion
|
| #region private TableRow addEmptyCell()
| private void addEmptyCell(GridViewRow gr)
| {
| System.Web.UI.WebControls.TableCell tc = new TableCell();
| tc.Text = "&nbsp;&nbsp;";
| ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
| }
| #endregion
|
| #region private void removeActionCell()
| private void removeActionCell(GridViewRow gr)
| {
| TableCell[] tmpcell = new TableCell[gr.Cells.Count];
| gr.Cells.CopyTo(tmpcell, 0);
| foreach (TableCell c in tmpcell)
| {
| System.Web.UI.Control ctrl = new System.Web.UI.Control();
| if (c.Controls.Count > 0)
| ctrl = c.Controls[0];
| if (ctrl != null && ctrl.GetType().Name == "LinkButton")
| gr.Cells.Remove(c);
| }
|
| }
| #endregion
|
| #region private void setEachControlValues()
| private void setEachControlValues(System.Web.UI.Control ec,
object
| objItems)
| {
| switch (ec.GetType().Name)
| {
| case "TextBox":
| TextBox ctrlText = (TextBox)ec;
| setControlValue(ctrlText.ID, ctrlText.Text, objItems);
| break;
| case "HiddenField":
| HiddenField ctrl = (HiddenField )ec;
| setControlValue(ctrl.ID, ctrl.Value, objItems);
| break;
| case "DateBox":
| DateBox ctrlDB = (DateBox)ec;
| setControlValue(ctrlDB.ID, ctrlDB.Text, objItems);
| break;
| case "DateTimeBox":
| DateTimeBox ctrlDTB = (DateTimeBox)ec;
| setControlValue(ctrlDTB.ID, ctrlDTB.Text, objItems);
| break;
| case "CheckBox":
| CheckBox ctrlCheck = (CheckBox)ec;
| string valueToSet = "N";
| if (ctrlCheck.Checked)
| valueToSet = "Y";
| setControlValue(ctrlCheck.ID, valueToSet, objItems);
| break;
| case "DropDownList":
| DropDownList ctrldrp = (DropDownList)ec;
| setControlValue(ctrldrp.ID, ctrldrp.SelectedValue,
| objItems);
| break;
| //also needs to set the ctrldrp.Text to the label control
| //in the Items templates
| case "RadioButtonList":
| RadioButtonList ctrlRdo = (RadioButtonList)ec;
| setControlValue(ctrlRdo.ID, ctrlRdo.SelectedValue,
| objItems);
| break;
| case "Label":
| Label ctrlLabel = (Label)ec;
| setControlValue(ctrlLabel.ID, ctrlLabel.Text,
objItems);
| break;
| }
|
| }
|
| #endregion
|
| #region public GridViewMetaData MetaData
| private GridViewMetaData _MetaData;
| public GridViewMetaData MetaData
| {
| get { return _MetaData; }
| set { _MetaData = value; }
| }
| #endregion
|
| #region public string DomainObjectName
| private string _domainObjectName;
| public string DomainObjectName
| {
| get { return _domainObjectName; }
| set { _domainObjectName = value; }
| }
| #endregion
|
| #region public string DomainObjectListKey
| private string _DomainObjectListKey;
| public string DomainObjectListKey
| {
| get { return _DomainObjectListKey; }
| set { _DomainObjectListKey = value; }
| }
| #endregion
|
| #region public string MetaDataId
| private string _MetaDataId;
| public string MetaDataId
| {
| get { return _MetaDataId; }
| set { _MetaDataId = value; }
| }
| #endregion
|
| #region public string GridPostbackEvent
| private string _GridPostbackEvent;
| public string GridPostbackEvent
| {
| get { return _GridPostbackEvent; }
| set { _GridPostbackEvent = value; }
| }
| #endregion
|
| #region public bool BypassGridEvent
| private bool _BypassGridEvent = false;
| public bool BypassGridEvent
| {
| get { return _BypassGridEvent; }
| set { _BypassGridEvent = value; }
| }
| #endregion
|
| #region public bool ShowGridViewEditButtons
| private bool _ShowGridViewEditButtons;
| public bool ShowGridViewEditButtons
| {
| get { return _ShowGridViewEditButtons; }
| set { _ShowGridViewEditButtons = value; }
| }
| #endregion
|
| #region public string PropertyName
| private string _PropertyName = string.Empty;
| public string PropertyName
| {
| get { return _PropertyName; }
| set { _PropertyName = value; }
| }
| #endregion
|
| #region private Array getAddedItems()
| private Array getAddedItems(IList oldList, object addedItems)
| {
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| Utils.Utils.GetCurrentControllerData();
| int arrayLength = 1;
| if (oldList != null && oldList.Count > 0)
| arrayLength = oldList.Count + 1;
| Array arrayItems = Array.CreateInstance(addedItems.GetType(),
| arrayLength);
| int i = 0;
| if (oldList != null && oldList.Count > 0)
| {
| foreach (IDomainObject dm in oldList)
| {
| arrayItems.SetValue(dm, i);
| i++;
| }
| }
| arrayItems.SetValue(addedItems, i);
| return arrayItems;
| }
| #endregion
|
| #region private Array getUpdatedItems()
| private Array getUpdatedItems(IList oldList, object updatedItems,
| Type domainObjectType, int rowIndex, string propertyToUpdate, bool value)
| {
| //Also set the HasBeenEdited/HasBeenDeleted field with the
value
| true/false..
| setControlValue(propertyToUpdate, value, updatedItems);
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| Utils.Utils.GetCurrentControllerData();
| Array arrayItems = Array.CreateInstance(domainObjectType,
| oldList.Count);
| int i = 0;
| foreach (IDomainObject dm in oldList)
| {
| if (i == rowIndex)//if the row index match the current object then
| replace the displayed column's values with the updated one
| {
| foreach (GridViewColumnMetaData columnMetaData in MetaData.Columns)
| {
| if (columnMetaData.IsDisplayed)
| {
| PropertyUtilities.SetValue(dm, columnMetaData.PropertyName,
| PropertyUtilities.GetValue((IDomainObject)updatedI tems,
| columnMetaData.PropertyName));
| }
| }
| }
| // also set hasbeenEdited/hasbeenDeleted with true/false
| setControlValue(propertyToUpdate, value, dm);
| arrayItems.SetValue(dm, i);
| i++;
| }
| return arrayItems;
| }
| #endregion
|
| #region private Array getRemovedItems()
| private Array getRemovedItems(IList oldList, object removedItems,
| int rowIndex)
| {
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| Utils.Utils.GetCurrentControllerData();
| Array arrayItemsToCopy =
| Array.CreateInstance(removedItems.GetType(), oldList.Count);
| Array arrayItems =
Array.CreateInstance(removedItems.GetType(),
| oldList.Count - 1);
| int i = 0;
| foreach (IDomainObject dm in oldList)
| {
| if (i != rowIndex)//if the row index match the current
| object then remove it(do not add to list)
| arrayItemsToCopy.SetValue(dm, i);
| i++;
| }
|
| int newArrayCount = 0;
| for (int j = 0; j < arrayItemsToCopy.Length; j++)
| {
| if (arrayItemsToCopy.GetValue(j) != null)
| {
| arrayItems.SetValue(arrayItemsToCopy.GetValue(j),
| newArrayCount);
| newArrayCount++;
| }
| }
|
| return arrayItems;
| }
| #endregion
|
| #region private void setControlValue()
| private void setControlValue(string propertyName, object value,
| object dObject)
| {
| PropertyInfo pi = null;
| pi = dObject.GetType().GetProperty(propertyName);
| SNF.Model.PropertyUtilities.SetValue((IDomainObjec t)dObject,
pi,
| value);
|
| }
| #endregion
|
| #region private void setPropertyArrayValue()
| private void setPropertyArrayValue(Array arrayItems)
| {
|
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| Utils.Utils.GetCurrentControllerData();
| IDomainObject domainObject =
CurrentControllerData.DomainObject;
| PropertyInfo pi =
| domainObject.GetType().GetProperty(PropertyName);
| pi.SetValue(domainObject, arrayItems, null);
| }
| #endregion
|
| #region private void ProcessControllerEvent()
| private void ProcessControllerEvent(string eventName)
| {
| // Process the current event
|
| MyPrj.SNF.Web.Controller.RequestContext CurrentRequestContext
=
| Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
| MyPrj.SNF.Web.Controller.RequestContext;
| MyPrj.SNF.Web.Controller.ControllerData CurrentControllerData
=
| CurrentRequestContext.CurrentControllerData;
| CurrentControllerData.EventName = eventName;
|
| MyPrj.SNF.Web.Controller.ProcessResult pr =
| MyPrj.SNF.Web.Controller.EventProcessor.ProcessEve nt(
| CurrentRequestContext, CurrentControllerData.StateId,
| CurrentControllerData.EventName);
|
| CurrentControllerData.EventName = pr.EventName; // Capture
the
| EventName from the result;
| }
| #endregion
|
| #region private void addAjaxSupport()
| private void addAjaxSupport(bool add)
| {
| ScriptManager
| sm = ScriptManager.GetCurrent(Page);
| if (sm == null)
| throw new HttpException("A ScriptManager control must
exist
| on the current page.");
| UpdatePanel updatePanel = new UpdatePanel();
| updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
| updatePanel.ID = "updatePanel" + this.ID;
| updatePanel.ContentTemplateContainer.Controls.Add( this);
| this.Controls.Add(updatePanel);
| }
| #endregion
|
| #region -- section to show/hide empty header and footer rows
|
| private GridViewRow _headerRow;
| private GridViewRow _footerRow;
|
| private bool _showHeaderWhenEmpty;
| private bool _showFooterWhenEmpty;
|
| public bool ShowHeaderWhenEmpty
| {
| get { return _showHeaderWhenEmpty; }
| set { _showHeaderWhenEmpty = value; }
| }
|
| public bool ShowFooterWhenEmpty
| {
| get { return _showFooterWhenEmpty; }
| set { _showFooterWhenEmpty = value; }
| }
|
| public override GridViewRow HeaderRow
| {
| get { return base.HeaderRow ?? _headerRow; }
| }
|
| public override GridViewRow FooterRow
| {
| get { return base.FooterRow ?? _footerRow; }
| }
|
| private void InitializeRow(GridViewRow row, DataControlField[]
| fields, TableRowCollection newRows)
| {
| GridViewRowEventArgs e = new GridViewRowEventArgs(row);
| InitializeRow(row, fields);
| OnRowCreated(e);
| newRows.Add(row);
| row.DataBind();
| OnRowDataBound(e);
| row.DataItem = null;
| }
|
| #endregion
|
| #region protected void SetupStyleAndBehaviour ()
| protected virtual void SetupStyleAndBehaviour()
| {
| EnableViewState = false;
| AutoGenerateColumns = false;
|
| AllowSorting = true;
| AllowPaging = true;
| EnableSortingAndPagingCallbacks = false;
| AutoGenerateSelectButton = false;
| AutoGenerateDeleteButton = false;
| AutoGenerateEditButton = false;
|
| ShowHeader = true;
| ShowFooter = true;
| EmptyDataText = "No records found";
|
| CssClass = "grid";
| CellPadding = 3;
| CellSpacing = 0;
| GridLines = GridLines.Horizontal;
|
| PageSize = 20;
| PagerStyle.CssClass = "gridPager";
| PagerSettings.FirstPageText = "<<";
| PagerSettings.PreviousPageText = "<";
| PagerSettings.NextPageText = ">";
| PagerSettings.LastPageText = ">>";
| PagerSettings.PageButtonCount = 10;
| PagerSettings.Mode = PagerButtons.NumericFirstLast;
|
| RowStyle.CssClass = "gridRow";
| SelectedRowStyle.CssClass = "gridSelectedRow";
| HeaderStyle.CssClass = "gridViewHeader";
| FooterStyle.CssClass = "gridfooter";
| AlternatingRowStyle.CssClass = "gridAlternatingRow";
| RemovedItemCssClass = "gridDeletedRow";
| }
| #endregion
|
| #region public GridViewMode GridMode
| private GridViewMode _GridMode = GridViewMode.Editable;
| /// <summary>
| ///
| /// </summary>
| public GridViewMode GridMode
| {
| get { return _GridMode; }
| set { _GridMode = value; }
| }
| #endregion
|
| #region Custom Management of SortExpression & SortDirection
|
| #region public string CSSortExpression
| private string _CSSortExpression;
| public string CSSortExpression
| {
| get { return _CSSortExpression; }
| set { _CSSortExpression = value; }
| }
| #endregion
|
| #region public SortDirection CSSortDirection
| private MyPrj.SNF.Application.SortDirection _CSSortDirection;
| public MyPrj.SNF.Application.SortDirection CSSortDirection
| {
| get { return _CSSortDirection; }
| set { _CSSortDirection = value; }
| }
| #endregion
|
| #endregion Custom Management of SortExpression & SortDirection
|
| #region public string RemovedItemCssClass
| private string _RemovedItemCssClass;
| public string RemovedItemCssClass
| {
| get { return _RemovedItemCssClass; }
| set { _RemovedItemCssClass = value; }
| }
| #endregion
|
| #region public string UpdatePanelId
| private string _UpdatePanelId;
| public string UpdatePanelId
| {
| get { return _UpdatePanelId; }
| set { _UpdatePanelId = value; }
| }
| #endregion
| }
| }
|
|
|
| "TS" <> wrote in message
| news:...
| > hello, I have 2 new issues:
| >
| > 1. My control is overriding OnRowCreated and it calls
base.OnRowCreated
| > and on my aspx.cs page i am attaching an event handler to this
RowCreated
| > but it is not running. I also tried to add an event handler to
| > RowDataBound and calling base.OnRowDataBound and it doesnt get called
in
| > aspx.cs either.
| >
| > What could be the cause of this? I dont understand since i'm calling
base
| > implementation (which seeing the code thru reflector it calls any
attached
| > handlers)
| >
| > 2. This is related somehow to first point. As stated in the first
problem
| > you already resolved, i attached event handlers in my custom control
| > instead of overriding them and that caused my event handlers on aspx.cs
| > page to be called correctly for most of them. When i tried to attach
event
| > handler for RowCreated in custom control, it is not called, but when I
| > override OnRowCreated it is called. Even when I attached event handler
for
| > RowCreated in custom control AND aspx.cs page, neither were called. The
| > grid events that I am currently using successfully on aspx.cs are
| > RowUpdating and RowEditing, both of which are also attached event
handlers
| > in custom control.
| >
| > thanks
| >
| > "Allen Chen [MSFT]" <v-> wrote in message
| > news:iuX$...
| >> Hi,
| >>
| >> Do you have any further questions? If you have please provide some
code
| >> so
| >> that I can test it on my side.
| >>
| >> Regards,
| >> Allen Chen
| >> Microsoft Online Community Support
| >>
| >> --------------------
| >> | From: "TS" <>
| >> | References: <#>
| >> <#>
| >> <>
| >> <A3AFHn$>
| >> | Subject: Re: overriding GridView.OnRowDeleting - can call registered
| >> event handlers
| >> | Date: Wed, 22 Oct 2008 11:07:08 -0500
| >> | Lines: 223
| >> | X-Priority: 3
| >> | X-MSMail-Priority: Normal
| >> | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
| >> | X-RFC2646: Format=Flowed; Original
| >> | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
| >> | Message-ID: <>
| >> | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> | NNTP-Posting-Host: 168.38.106.193
| >> | Path:
TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
| >> | Xref: TK2MSFTNGHUB02.phx.gbl
| >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1142
| >> | X-Tomcat-NG:
microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> |
| >> | that did it, but for some reason the delegates for DataBinding was
not
| >> | getting called, but that method does call base.DataBind, so make it
| >> | overridable is OK, though not sure why it wasnt getting called
| >> |
| >> | "Allen Chen [MSFT]" <v-> wrote in message
| >> | news:A3AFHn$...
| >> | > Hi,
| >> | >
| >> | > Thanks for your clarification. To achieve your requirement I would
| >> suggest
| >> | > you attach an event handler in the constructor method instead of
| >> | > overriding
| >> | > the OnRowDeleting method.
| >> | >
| >> | > public class MyGridView : GridView
| >> | > {
| >> | >
| >> | > public MyGridView()
| >> | > {
| >> | > this.RowDeleting += new
| >> | > GridViewDeleteEventHandler(MyGridView_RowDeleting) ;
| >> | > }
| >> | > void MyGridView_RowDeleting(object sender,
| >> GridViewDeleteEventArgs
| >> | > e)
| >> | > {
| >> | > //Your code here
| >> | > }
| >> | > }
| >> | >
| >> | > Please have a try and let me know if it's what you need.
| >> | >
| >> | > Regards,
| >> | > Allen Chen
| >> | > Microsoft Online Support
| >> | >
| >> | > --------------------
| >> | > | From: "TS" <>
| >> | > | References: <#>
| >> | > <#>
| >> | > | Subject: Re: overriding GridView.OnRowDeleting - can call
| >> registered
| >> | > event handlers
| >> | > | Date: Tue, 21 Oct 2008 11:38:04 -0500
| >> | > | Lines: 136
| >> | > | X-Priority: 3
| >> | > | X-MSMail-Priority: Normal
| >> | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
| >> | > | X-RFC2646: Format=Flowed; Original
| >> | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
| >> | > | Message-ID: <>
| >> | > | Newsgroups:
| >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> | > | NNTP-Posting-Host: 168.38.106.193
| >> | > | Path:
| >> TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP03.phx.gbl
| >> | > | Xref: TK2MSFTNGHUB02.phx.gbl
| >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1140
| >> | > | X-Tomcat-NG:
| >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> | > |
| >> | > | So it looks like the "else if" section of the posted code below
is
| >> | > getting
| >> | > | run, which throws an exception and this is why that
| >> base.OnRowDeleting
| >> | > is
| >> | > | commented out. Our custom OnRowDeleting does a lot of stuff in it
| >> that
| >> | > is
| >> | > | common to every grid. The only thing the base class does is call
| >> any
| >> | > | registered delegates. So if we dont add event handler in aspx
page
| >> for
| >> | > | onRowDeleting, the base class will throw this error.
| >> | > |
| >> | > | We want to not have to attach custom event handlers in every
aspx
| >> page
| >> | > that
| >> | > | uses the grid control and just let our custom gridView handle
all
| >> the
| >> | > | processing in all the grid events (onRowEditing, onRowUpdating,
| >> | > | onRowDeleting, etc.), but I need to be able to support
overriding
| >> this
| >> | > | behavior sometimes by adding a custom event handler in my aspx
| >> page.
| >> | > |
| >> | > | Could I override the each Event Handler's add/remove properties
so
| >> that
| >> | > i
| >> | > | can handle the Event[] collection myself and then i'll be able
to
| >> call
| >> | > the
| >> | > | individually registered delegates?
| >> | > | public event GridViewDeleteEventHandler RowDeleting
| >> | > |
| >> | > | {
| >> | > |
| >> | > | add
| >> | > |
| >> | > | {
| >> | > |
| >> | > | base.Events.AddHandler(EventRowDeleting, value);
| >> | > |
| >> | > | }
| >> | > |
| >> | > | remove
| >> | > |
| >> | > | {
| >> | > |
| >> | > | base.Events.RemoveHandler(EventRowDeleting, value);
| >> | > |
| >> | > | }
| >> | > |
| >> | > | }
| >> | > |
| >> | > |
| >> | > | "Allen Chen [MSFT]" <v-> wrote in
| >> message
| >> | > | news:%...
| >> | > | > Hi,
| >> | > | >
| >> | > | > As you said, it's a private field so we cannot access it in the
| >> custom
| >> | > | > GridView. I think we'd better focus on your following
statement:
| >> | > | >
| >> | > | > I have a custom GridView and it overrides onRowDeleting and
| >> doesn't
| >> | > | > call base.OnRowDeleting because the person implementing had
| >> | > undesirable
| >> | > | > effects.
| >> | > | >
| >> | > | > Could you tell me what're the undesirable effects and your
| >> requirement
| >> | > as
| >> | > | > well? I think if we can eliminate them this issue can be worked
| >> | > around.
| >> | > | >
| >> | > | > Regards,
| >> | > | > Allen Chen
| >> | > | > Microsoft Online Support
| >> | > | >
| >> | > | > Delighting our customers is our #1 priority. We welcome your
| >> comments
| >> | > and
| >> | > | > suggestions about how we can improve the support we provide to
| >> you.
| >> | > Please
| >> | > | > feel free to let my manager know what you think of the level of
| >> | > service
| >> | > | > provided. You can send feedback directly to my manager at:
| >> | > | > .
| >> | > | >
| >> | > | > ==================================================
| >> | > | > Get notification to my posts through email? Please refer to
| >> | > | >
| >> | >
| >>
http://msdn.microsoft.com/en-us/subs...#notifications.
| >> | > | >
| >> | > | > Note: The MSDN Managed Newsgroup support offering is for
| >> non-urgent
| >> | > issues
| >> | > | > where an initial response from the community or a Microsoft
| >> Support
| >> | > | > Engineer within 1 business day is acceptable. Please note that
| >> each
| >> | > follow
| >> | > | > up response may take approximately 2 business days as the
support
| >> | > | > professional working with you may need further investigation to
| >> reach
| >> | > the
| >> | > | > most efficient resolution. The offering is not appropriate for
| >> | > situations
| >> | > | > that require urgent, real-time or phone-based interactions or
| >> complex
| >> | > | > project analysis and dump analysis issues. Issues of this
nature
| >> are
| >> | > best
| >> | > | > handled working with a dedicated Microsoft Support Engineer by
| >> | > contacting
| >> | > | > Microsoft Customer Support Services (CSS) at
| >> | > | >
| >> | >
| >>
http://support.microsoft.com/select/...tance&ln=en-us.
| >> | > | > ==================================================
| >> | > | > This posting is provided "AS IS" with no warranties, and
confers
| >> no
| >> | > | > rights.
| >> | > | >
| >> | > | > --------------------
| >> | > | > | From: "TS" <>
| >> | > | > | Subject: overriding GridView.OnRowDeleting - can call
| >> registered
| >> | > event
| >> | > | > handlers
| >> | > | > | Date: Mon, 20 Oct 2008 16:17:30 -0500
| >> | > | > | Lines: 24
| >> | > | > | X-Priority: 3
| >> | > | > | X-MSMail-Priority: Normal
| >> | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
| >> | > | > | X-RFC2646: Format=Flowed; Original
| >> | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
| >> | > | > | Message-ID: <#>
| >> | > | > | Newsgroups:
| >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> | > | > | NNTP-Posting-Host: 168.38.106.193
| >> | > | > | Path:
| >> | > TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
| >> | > | > | Xref: TK2MSFTNGHUB02.phx.gbl
| >> | > | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1138
| >> | > | > | X-Tomcat-NG:
| >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
| >> | > | > |
| >> | > | > | Hello, I have a custom GridView and it overrides
onRowDeleting
| >> and
| >> | > | > doesn't
| >> | > | > | call base.OnRowDeleting because the person implementing had
| >> | > undesirable
| >> | > | > | effects. the problem is I now when clients of this control
| >> register
| >> | > | > their
| >> | > | > | own event handlers for RowDeleting, it is never raised.
| >> | > | > |
| >> | > | > | I'm trying to add lines 1 - 5 to my overriden OnRowDeleting
| >> method
| >> | > but
| >> | > | > can't
| >> | > | > | because the key accessed in base.Events is EventRowDeleting,
| >> which
| >> | > is
| >> | > an
| >> | > | > | object that is a private constant that i dont have access to
in
| >> my
| >> | > | > derived
| >> | > | > | control.
| >> | > | > |
| >> | > | > | How do I get a handle to any event handlers so I can call
| >> them???
| >> | > | > |
| >> | > | > | // this is the dissasembled method for GridView:
| >> | > | > | protected virtual void OnRowDeleting(GridViewDeleteEventArgs
| >> e){
| >> | > | > bool
| >> | > | > | isBoundUsingDataSourceID = base.IsBoundUsingDataSourceID;1
| >> | > | > | GridViewDeleteEventHandler handler =
| >> (GridViewDeleteEventHandler)
| >> | > | > | base.Events[EventRowDeleting];2 if (handler != null)3
{4
| >> | > | > | handler(this, e);5 } else if
(!isBoundUsingDataSourceID
| >> &&
| >> | > | > !e.Cancel)
| >> | > | > | { throw new
| >> | > | > HttpException(SR.GetString("GridView_UnhandledEven t",
| >> | > | > | new object[] { this.ID, "RowDeleting" })); }}
| >> | > | > |
| >> | > | > |
| >> | > | > |
| >> | > | > |
| >> | > | > |
| >> | > | >
| >> | > |
| >> | > |
| >> | > |
| >> | >
| >> |
| >> |
| >> |
| >>
| >
| >
|
|
|

 
Reply With Quote
 
 
 
 
TS
Guest
Posts: n/a
 
      11-07-2008
sent it today

"Allen Chen [MSFT]" <v-> wrote in message
news:...
> Hi,
>
> Have you sent the demo to me?
>
> Regards,
> Allen Chen
> Microsoft Online Support
> --------------------
> | From: "TS" <>
> | References: <#>
> <#>
> <>
> <A3AFHn$>
> <>
> <iuX$>
> <>
> | Subject: Re: overriding GridView.OnRowDeleting - can call registered
> event handlers
> | Date: Wed, 29 Oct 2008 11:08:23 -0500
> | Lines: 1559
> | X-Priority: 3
> | X-MSMail-Priority: Normal
> | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
> | X-RFC2646: Format=Flowed; Response
> | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
> | Message-ID: <>
> | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | NNTP-Posting-Host: 168.38.106.113
> | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP05.phx.gbl
> | Xref: TK2MSFTNGHUB02.phx.gbl
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1147
> | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> |
> | I see now that all the events get raised when I click one of the grid's
> | buttons to fire Edit, Update, etc. So on default data binding of the
> grid,
> | on just load of the page, the events are not getting raised. Sounds like
> | something is missing from the control's code:
> |
> | using System;
> | using System.Collections;
> | using System.Collections.Specialized;
> | using System.Collections.Generic;
> | using System.Web.UI.WebControls;
> | using System.Web.UI;
> | using System.Reflection;
> | using MyPrj.SNF.Model;
> | using MyPrj.SNF.Application;
> | using System.Data;
> | using System.Web;
> | /// <summary>
> | /// Summary description for EditableGrid
> | /// </summary>
> |
> | namespace MyPrj.SNF.Web.Control
> | {
> |
> | public class EditableGrid : System.Web.UI.WebControls.GridView
> | {
> | public EditableGrid()
> | {
> | //
> | // TODO: Add constructor logic here
> | //
> | ShowFooter = true;
> | ShowHeader = true;
> | ShowFooterWhenEmpty = true;
> | ShowHeaderWhenEmpty = true;
> | ShowGridViewEditButtons = true;
> | GridPostbackEvent = "GridReload";
> | EmptyDataText = "No Records Found";
> | EnableViewState = false;
> | SetupStyleAndBehaviour();
> | }
> |
> | #region Events
> | #region protected override void OnLoad(EventArgs e)
> | protected override void OnLoad(EventArgs e)
> | {
> | base.OnLoad(e);
> | #region Add Delegates for all grid events
> | // Add delegates instead of overriding for all the grid events that
> dont
> | need to call base's implementation, otherwise
> | // every aspx page would have to have a delegate for each grid event
> that
> | was supported for that grid on that page
> |
> | // Note: do in OnLoad so that the individual aspx pages can also do
> this
> | in their OnLoad and have their events
> | // run first so that the BypassGridEvent flag can be set to true to
> | bypass execution here.
> | this.RowCommand += new
> | GridViewCommandEventHandler(EditableGrid_RowComman d);
> | this.RowEditing += new
> GridViewEditEventHandler(EditableGrid_RowEditing);
> | this.RowCancelingEdit += new
> | GridViewCancelEditEventHandler(EditableGrid_RowCan celingEdit);
> | this.RowUpdating += new
> | GridViewUpdateEventHandler(EditableGrid_RowUpdatin g);
> | this.RowDeleting += new
> | GridViewDeleteEventHandler(EditableGrid_RowDeletin g);
> | this.Sorting += new GridViewSortEventHandler(EditableGrid_Sorting);
> | this.PageIndexChanged += new
> EventHandler(EditableGrid_PageIndexChanged);
> | #endregion
> | }
> | #endregion
> | #region protected override int CreateChildControls(IEnumerable
> dataSource,
> | bool dataBinding)
> | protected override int CreateChildControls(IEnumerable dataSource,
> bool
> | dataBinding)
> | {
> | int rows = base.CreateChildControls(dataSource,
> dataBinding);
> |
> | // no data rows created, create empty table if enabled
> | if (rows == 0 && (ShowFooterWhenEmpty ||
> ShowHeaderWhenEmpty))
> | {
> | // create the table
> | Table table = CreateChildTable();
> | Controls.Clear();
> | Controls.Add(table);
> | DataControlField[] fields;
> | if (AutoGenerateColumns)
> | {
> | PagedDataSource source = new PagedDataSource();
> | source.DataSource = dataSource;
> | ICollection autoGeneratedColumns =
> CreateColumns(source,
> | true);
> | fields = new
> | DataControlField[autoGeneratedColumns.Count];
> | autoGeneratedColumns.CopyTo(fields, 0);
> | }
> | else
> | {
> | fields = new DataControlField[Columns.Count];
> | Columns.CopyTo(fields, 0);
> | }
> |
> | TableRowCollection newRows = table.Rows;
> | if (ShowHeaderWhenEmpty)
> | {
> | // create a new header row
> | _headerRow = CreateRow(-1, -1,
> | DataControlRowType.Header, DataControlRowState.Normal);
> | InitializeRow(_headerRow, fields, newRows);
> | }
> |
> | //// create the empty row
> | GridViewRow emptyRow = new GridViewRow(-1, -1,
> | DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
> | TableCell cell = new TableCell();
> | cell.ColumnSpan = fields.Length;
> | cell.Width = Unit.Percentage(100);
> | //
> | if (EmptyDataTemplate != null)
> | {
> | EmptyDataTemplate.InstantiateIn(cell);
> | }
> | else if (!string.IsNullOrEmpty(EmptyDataText))
> | //else if (!string.IsNullOrEmpty(EmptyDataText) &&
> | MyPrj.SNF.Web.Utils.Utils.InReadMode())
> | {
> | cell.Controls.Add(new
> LiteralControl(EmptyDataText));
> | }
> | emptyRow.Cells.Add(cell);
> | GridViewRowEventArgs e = new
> GridViewRowEventArgs(emptyRow);
> | OnRowCreated(e);
> | newRows.Add(emptyRow);
> | emptyRow.DataBind();
> | OnRowDataBound(e);
> | emptyRow.DataItem = null;
> | if (ShowFooterWhenEmpty &&
> | !MyPrj.SNF.Web.Utils.Utils.InReadMode())
> | {
> | // create footer row
> | _footerRow = CreateRow(-1, -1,
> | DataControlRowType.Footer, DataControlRowState.Normal);
> | InitializeRow(_footerRow, fields, newRows);
> | }
> | }
> | return rows;
> | }
> | #endregion
> | #region protected override void Render()
> | protected override void Render(HtmlTextWriter writer)
> | {
> | if (DataSource != null && GridMode == GridViewMode.Editable)
> | {
> | IList listRows = DataSource as IList;
> | int rowIndex = 0;
> | string itemCountHiddenField = "<input type=\"hidden\"
> | name=\"" + this.PropertyName + "Count" + "\" id=\"" + this.PropertyName
> +
> | "Count" + "\" value=\"" + listRows.Count.ToString() + "\" />";
> | writer.WriteLine(itemCountHiddenField);
> | foreach (MyPrj.SNF.Model.IDomainObject domainObject in
> | listRows)
> | {
> | foreach (GridViewColumnMetaData columnMetaData in
> | MetaData.Columns)
> | {
> | object propValue =
> | Utils.Utils.GetPropertyValue(domainObject, columnMetaData.PropertyName);
> | string propertyValue = string.Empty;
> | if (propValue != null)
> | propertyValue = propValue.ToString();
> | // Replace line breaks with a single space
> | // Escape Double Quotes & backslashes so the
> value
> | can be put safely into the array and hidden fields
> | propertyValue = propertyValue.Replace("\r\n", "
> | ").Replace(@"\", @"\\").Replace(@"""", "\\\"");
> |
> |
> | string hiddenFieldId = (PropertyName + "_" +
> | rowIndex + "_" + columnMetaData.PropertyName);
> | string hiddenFieldToRender = "<input
> type=\"hidden\"
> | name=\"" + hiddenFieldId + "\" id=\"" + hiddenFieldId + "\" value=\"" +
> | propertyValue + "\" />";
> | writer.WriteLine(hiddenFieldToRender);
> | }
> | rowIndex++;
> | }
> | }
> | base.Render(writer);
> | RenderHiddenFieldsForActions();
> | }
> | #endregion
> | #region protected override void LoadControlState()
> | /// <summary>
> | /// Manages the Sort information.
> | /// </summary>
> | /// <param name="savedState"></param>
> | protected override void LoadControlState(object savedState)
> | {
> | object[] states = (object[])savedState;
> | base.LoadControlState(states[0]);
> |
> | CSSortExpression = (string)states[1];
> | CSSortDirection =
> | (MyPrj.SNF.Application.SortDirection)states[2];
> | }
> | #endregion
> | #region protected override object SaveControlState()
> | protected override object SaveControlState()
> | {
> | object[] states = new object[3];
> | states[0] = base.SaveControlState();
> |
> | states[1] = CSSortExpression;
> | states[2] = CSSortDirection;
> |
> | return states;
> | }
> | #endregion
> | protected override void OnDataBinding(EventArgs e)
> | {
> | DataSource = Utils.Utils.GetPropertyValue(PropertyName) as
> | IList;
> | addColumns();
> | base.OnDataBinding(e);
> | }
> | protected override void OnRowCreated(GridViewRowEventArgs e)
> | {
> | if (e.Row.DataItem != null && e.Row.RowType ==
> | DataControlRowType.DataRow)
> | {
> | object isRowDeleted =
> | Utils.Utils.GetPropertyValue((IDomainObject)e.Row. DataItem,
> | "HasBeenDeleted");
> | addRowEvents(e.Row, (bool)isRowDeleted);
> | }
> |
> | #region Add footer row events
> | if (MetaData != null && EditIndex < 0 && e.Row.RowType ==
> | DataControlRowType.Footer)
> | {
> | foreach (GridViewActionInfo actionInfo in MetaData.Actions)
> | {
> | System.Web.UI.WebControls.LinkButton lb = new
> | System.Web.UI.WebControls.LinkButton();
> | if (actionInfo.EventLocation ==
> | GridViewActionInfo.EventLocationCode.FooterRow)
> | {
> | lb.Text = actionInfo.DisplayName;
> | lb.ID = "lnk" + this.ID + actionInfo.EventName;
> | lb.CommandName = actionInfo.CommandType.ToString();
> | lb.CausesValidation = actionInfo.CausesValidation;
> | lb.ValidationGroup = this.ID;
> | lb.OnClientClick = getGridEventOnClickString(e.Row,
> lb,
> | true, 0, actionInfo.CausesValidation,
> actionInfo.ClientSideEventHandlerName,
> | actionInfo.ActionParameters);
> | lb.Attributes.Add("href", "#");
> | addActionCell(e.Row, lb);
> | TableHeaderCell c = new TableHeaderCell();
> | c.Text = "";
> | HeaderRow.Cells.Add(c);
> | }
> | }
> | }
> | #endregion
> |
> | base.OnRowCreated(e);
> | }
> | #region Delegated Events
> |
> | #region void EditableGrid_RowEditing(object sender,
> GridViewEditEventArgs
> | e)
> | void EditableGrid_RowEditing(object sender, GridViewEditEventArgs e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | this.EditIndex = e.NewEditIndex;
> | this.DataBind();
> | }
> | #endregion
> | #region void EditableGrid_RowDeleting(object sender,
> | GridViewDeleteEventArgs e)
> | void EditableGrid_RowDeleting(object sender, GridViewDeleteEventArgs
> e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | this.EditIndex = -1;
> | Type domainObjectType = Type.GetType(DomainObjectName);
> | object objItems = Activator.CreateInstance(domainObjectType);
> | Array dataSourceItems = DataSource as Array;
> | objItems = dataSourceItems.GetValue(e.RowIndex);
> | Array updatedItems = getUpdatedItems((IList)DataSource, objItems,
> | domainObjectType, e.RowIndex, "HasBeenDeleted", true);
> | setPropertyArrayValue(updatedItems);
> | this.DataSource = updatedItems as IList;
> | this.DataBind();
> | }
> | #endregion
> | #region void EditableGrid_RowUpdating(object sender,
> | GridViewUpdateEventArgs e)
> | void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs
> e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | this.EditIndex = -1;
> | Type domainObjectType = Type.GetType(DomainObjectName);
> | object objItems =
> Activator.CreateInstance(domainObjectType);
> | foreach (System.Web.UI.Control c in
> | this.Rows[e.RowIndex].Controls)
> | {
> | //First level is table cell level.. we need to go one
> more
> | level..
> | if (c is DataControlFieldCell && c.Controls.Count > 0)
> | {
> | System.Web.UI.Control ec = c.Controls[0] as
> | System.Web.UI.Control;
> | setEachControlValues(ec, objItems);
> | }
> | }
> |
> | Array updatedItems = getUpdatedItems((IList)DataSource,
> | objItems, domainObjectType, e.RowIndex, "HasBeenEdited", true);
> | setPropertyArrayValue(updatedItems);
> | this.DataSource = updatedItems as IList;
> | this.DataBind();
> | }
> | #endregion
> | #region void EditableGrid_RowCommand(object sender,
> | GridViewCommandEventArgs e)
> | void EditableGrid_RowCommand(object sender, GridViewCommandEventArgs
> e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | #region -- insert new row code here
> |
> | if (e.CommandName.Equals("Add"))
> | {
> | //Here we have to get each item value from the controls.
> | Type domainObjectType = Type.GetType(DomainObjectName);
> | object objItems =
> | Activator.CreateInstance(domainObjectType);
> | foreach (System.Web.UI.Control c in
> this.FooterRow.Controls)
> | {
> | //First level is table cell level.. we
> | //need to go one more level..
> | if (c.GetType().Name == "DataControlFieldCell" &&
> | c.Controls.Count > 0)
> | {
> | System.Web.UI.Control ec = c.Controls[0] as
> | System.Web.UI.Control;
> | setEachControlValues(ec, objItems);
> | }
> | }
> |
> | Array addedItems = getAddedItems((IList)DataSource,
> | objItems);
> | setPropertyArrayValue(addedItems);
> | this.DataSource = addedItems as IList;
> | this.DataBind();
> | }
> |
> | #endregion
> |
> | #region -- restore rows here
> |
> | if (e.CommandName.Equals("Restore"))
> | {
> | this.EditIndex = -1;
> | Type domainObjectType = Type.GetType(DomainObjectName);
> | object objItems =
> | Activator.CreateInstance(domainObjectType);
> | Array dataSourceItems = DataSource as Array;
> | objItems =
> | dataSourceItems.GetValue(Convert.ToInt32(e.Command Argument));
> | Array updatedItems = getUpdatedItems((IList)DataSource,
> | objItems, domainObjectType, Convert.ToInt32(e.CommandArgument),
> | "HasBeenDeleted", false);
> | setPropertyArrayValue(updatedItems);
> | this.DataSource = updatedItems as IList;
> | this.DataBind();
> | }
> |
> | #endregion
> | }
> | #endregion
> | #region void EditableGrid_RowCancelingEdit(object sender,
> | GridViewCancelEditEventArgs e)
> | void EditableGrid_RowCancelingEdit(object sender,
> | GridViewCancelEditEventArgs e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | this.EditIndex = -1;
> | this.DataBind();
> | }
> | #endregion
> | #region void EditableGrid_Sorting(object sender,
> | GridViewSortEventArgs e)
> | void EditableGrid_Sorting(object sender, GridViewSortEventArgs
> e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | MyPrj.SNF.Web.Controller.RequestContext
> CurrentRequestContext
> =
> | Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
> | MyPrj.SNF.Web.Controller.RequestContext;
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | CurrentRequestContext.CurrentControllerData;
> |
> | if (CSSortExpression !=
> | ((GridViewSortEventArgs)e).SortExpression)
> | CSSortDirection =
> | MyPrj.SNF.Application.SortDirection.Ascending;
> | else
> | CSSortDirection = (CSSortDirection ==
> | MyPrj.SNF.Application.SortDirection.Descending) ?
> | MyPrj.SNF.Application.SortDirection.Ascending :
> | MyPrj.SNF.Application.SortDirection.Descending;
> |
> | CSSortExpression =
> ((GridViewSortEventArgs)e).SortExpression;
> | Array.Sort(DataSource as Array, new
> | MyPrj.SNF.Application.ClassComparer(CSSortExpressi on, CSSortDirection));
> | this.DataBind();
> | }
> | #endregion
> | #region void EditableGrid_PageIndexChanged(object sender,
> EventArgs
> | e)
> | void EditableGrid_PageIndexChanged(object sender, EventArgs e)
> | {
> | if (BypassGridEvent)
> | return;
> |
> | bool displayLastPage = false;
> | //try
> | //{
> | if (((GridViewPageEventArgs)e).NewPageIndex > -1)
> | PageIndex = ((GridViewPageEventArgs)e).NewPageIndex;
> | else
> | displayLastPage = true;
> | IList list = DataSource as IList;
> | if (displayLastPage)
> | PageIndex = (int)Math.Ceiling(((double)list.Count /
> | PageSize)) - 1;
> | this.DataBind();
> | //}
> | //catch (Exception expGeneral)
> | //{
> | // throw;
> | //}
> | }
> |
> | #endregion
> |
> | #endregion
> | #endregion
> |
> | #region void addColumns()
> |
> | private void addColumns()
> | {
> | if (MetaData == null)
> | MetaData =
> GridViewMetaData.GetGridViewMetaData(MetaDataId);
> | Columns.Clear();
> |
> | #region - all the controls
> |
> | foreach (GridViewColumnMetaData columnMetaData in
> | MetaData.Columns)
> | {
> |
> | if (columnMetaData.IsDisplayed)
> | {
> | TemplateField columnField = new TemplateField();
> | columnField.HeaderText = columnMetaData.HeaderText;
> | if (columnMetaData.IsSortable)
> | columnField.SortExpression =
> | columnMetaData.SortPropertyName;
> | columnField.ItemStyle.HorizontalAlign =
> | columnMetaData.HorizontalAlign;
> | columnField.ItemStyle.Width = columnMetaData.Width;
> |
> | if (GridMode == GridViewMode.Editable)
> | {
> | columnField.ItemTemplate = new
> | GridViewTemplate(ListItemType.Item, MetaData, columnMetaData, this.ID);
> | columnField.EditItemTemplate = new
> | GridViewTemplate(ListItemType.EditItem, MetaData, columnMetaData,
> this.ID);
> |
> | if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
> | this.EditIndex < 0)
> | {
> | columnField.FooterTemplate = new
> | GridViewTemplate(ListItemType.Footer, MetaData, columnMetaData,
> this.ID);
> | }
> | }
> | //Add the newly created bound field to the GridView.
> | Columns.Add(columnField);
> | }
> | }
> |
> | #endregion
> |
> | #region ------- add check box to each row if render
> selection
> is
> | specified
> |
> |
> | if ((MetaData.ShowSelectionInReadMode &&
> | MyPrj.SNF.Web.Utils.Utils.InReadMode()) ||
> | (MetaData.ShowSelectionInEditableMode &&
> | !MyPrj.SNF.Web.Utils.Utils.InReadMode()))
> | {
> | GridViewColumnMetaData gvMetaData = new
> | GridViewColumnMetaData(MetaData.SelectionPropertyN ame, "Select", false);
> | gvMetaData.ColumnType = "DomainObjectSelection";
> | TemplateField selectionField = new TemplateField();
> | selectionField.ItemTemplate = new
> | GridViewTemplate(ListItemType.EditItem, MetaData, gvMetaData, this.ID);
> | Columns.Add(selectionField);
> | }
> |
> | #endregion
> |
> | }
> |
> |
> |
> | #endregion
> |
> | #region private string getControlIndex()
> | private string getControlIndex(bool isFooterRow, int
> dataRowIndex)
> | {
> | //This is not a real code......????
> | //what do i do if there is no option..
> | string controlIndex = "";
> | int startCount = 0;
> |
> | if (isFooterRow)
> | {
> | startCount = 3;
> | if (Rows.Count > 1)
> | startCount = 3 + (Rows.Count - 1);
> |
> | if (startCount < 10)
> | controlIndex = "$ctl0" + startCount.ToString() +
> "$";
> | else
> | controlIndex = "$ctl" + startCount.ToString() + "$";
> | }
> | else
> | {
> | startCount = 2 + dataRowIndex;
> | if (startCount < 10)
> | controlIndex = "$ctl0" + startCount.ToString() +
> "$";
> | else
> | controlIndex = "$ctl" + startCount.ToString() + "$";
> | }
> |
> | return controlIndex;
> | }
> | #endregion
> |
> | #region private void addRowEvents(GridViewRow gr)
> | private void addRowEvents(GridViewRow gr, bool isDeleted)
> | {
> |
> | System.Web.UI.WebControls.LinkButton lb = new
> | System.Web.UI.WebControls.LinkButton();
> | if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
> | ShowGridViewEditButtons)
> | {
> |
> | #region //first add the data row events
> |
> | foreach (GridViewActionInfo actionInfo in
> MetaData.Actions)
> | {
> | if (actionInfo.EventLocation ==
> | GridViewActionInfo.EventLocationCode.DataRow)
> | {
> | lb = new System.Web.UI.WebControls.LinkButton();
> | lb.ID = "lnk" + this.ID + actionInfo.EventName;
> | lb.Text = actionInfo.DisplayName;
> | lb.CommandName =
> actionInfo.CommandType.ToString();
> | lb.ValidationGroup = this.ID;
> | lb.CausesValidation =
> actionInfo.CausesValidation;
> | lb.Attributes.Add("href", "#");
> | lb.OnClientClick = getGridEventOnClickString(gr,
> lb,
> | false, gr.RowIndex, actionInfo.CausesValidation,
> | actionInfo.ClientSideEventHandlerName, actionInfo.ActionParameters);
> |
> |
> | if (actionInfo.CommandType ==
> | GridViewActionInfo.CommandTypeCode.SNF)
> | lb.OnClientClick =
> | getSNFOnclickString(actionInfo, gr);
> | else if (isDeleted && actionInfo.CommandType ==
> | GridViewActionInfo.CommandTypeCode.Restore)
> | {
> | //If its deleted row then just show the
> restore
> | event and return
> | removeActionCell(gr);
> | //set the deleted row css class
> | gr.CssClass = RemovedItemCssClass;
> | lb.CommandArgument = gr.RowIndex.ToString();
> | addActionCell(gr, lb);
> | addEmptyCell(gr);
> | return;
> | }
> |
> |
> | bool addThis = false;
> | if (EditIndex == gr.RowIndex &&
> | (actionInfo.CommandType == GridViewActionInfo.CommandTypeCode.Update ||
> | actionInfo.CommandType ==
> | GridViewActionInfo.CommandTypeCode.Cancel))
> | addThis = true;
> | else if (EditIndex < 0 && EditIndex !=
> gr.RowIndex
> | && (actionInfo.CommandType != GridViewActionInfo.CommandTypeCode.Update
> &&
> | actionInfo.CommandType !=
> | GridViewActionInfo.CommandTypeCode.Cancel && actionInfo.CommandType !=
> | GridViewActionInfo.CommandTypeCode.Restore))
> | addThis = true;
> |
> | if (addThis)
> | addActionCell(gr, lb);
> |
> | }
> | }
> |
> | #endregion
> |
> |
> | #region //Add header row for the event
> |
> | TableHeaderCell c = new TableHeaderCell();
> | c.Text = "";
> | HeaderRow.Cells.Add(c);
> |
> | #endregion
> |
> | }
> | }
> | #endregion
> |
> | #region protected void RenderHiddenFieldsForActions()
> | protected void RenderHiddenFieldsForActions()
> | {
> | if (MetaData == null || MetaData.Actions == null ||
> | MetaData.Actions.Count < 1 || DataSource == null ||
> | ((IList)DataSource).Count == 0)
> | return;
> |
> | Hashtable hiddenFieldIds = new Hashtable();
> | foreach (GridViewActionInfo actionInfo in MetaData.Actions)
> | {
> | if (actionInfo.ActionParameters != null)
> | {
> | foreach (string argumentName in
> | actionInfo.ActionParameters.AllKeys)
> | {
> | if
> | (!hiddenFieldIds.ContainsKey(actionInfo.ActionPara meters[argumentName]))
> |
> hiddenFieldIds[actionInfo.ActionParameters[argumentName]]
> | = null;
> | }
> | }
> | }
> | foreach (string hiddenFieldId in hiddenFieldIds.Keys)
> | {
> | // Add the Hidden Field only if the page doesn't already
> | contain a control with same ID
> | if (!Utils.Utils.IsControlOnPage(Page, hiddenFieldId))
> | {
> | //For ajax postback we will have to register the
> hidden
> | fields
> | ScriptManager sm = ScriptManager.GetCurrent(Page);
> | if (sm != null && sm.IsInAsyncPostBack)
> |
> System.Web.UI.ScriptManager.RegisterHiddenField(th is,
> | hiddenFieldId, string.Empty);
> | else
> |
> Page.ClientScript.RegisterHiddenField(hiddenFieldI d,
> | string.Empty);
> | }
> | }
> | }
> | #endregion
> |
> | #region private string getSNFOnclickString(GridViewActionInfo
> | actionInfo,GridViewRow gr)
> | private string getSNFOnclickString(GridViewActionInfo
> actionInfo,
> | GridViewRow gr)
> | {
> | System.Text.StringBuilder sb = new
> System.Text.StringBuilder();
> | if (actionInfo.ActionParameters != null &&
> | actionInfo.ActionParameters.Count > 0)
> | {
> | Type gridType = gr.DataItem.GetType();
> | List<string> parameters = new List<string>();
> | foreach (string propertyName in actionInfo.ActionParameters.AllKeys)
> | {
> | if (actionInfo.ActionParameters[propertyName] !=
> null)
> | {
> | string controlId =
> | actionInfo.ActionParameters[propertyName];
> | object propertyValue =
> | gridType.GetProperty(propertyName).GetValue(gr.Dat aItem, null);
> | if (PropertyUtilities.IsNullValue(propertyValue))
> | propertyValue = string.Empty;
> |
> | parameters.Add(controlId + "~" + propertyValue);
> | }
> | }
> | object[] args = new object[] { "this",
> actionInfo.EventName,
> | actionInfo.ClientSideEventHandlerName, string.Join("-",
> | parameters.ToArray()), gr.RowIndex };
> | return
> |
> string.Format("processGridViewEvent(\"{0}\",\"{1}\ ",\"{2}\",\"{3}\",\"{4}\")
> ",
> | args);
> | }
> | return string.Empty;
> | }
> | #endregion
> |
> | #region private string getGridEventOnClickString()
> | private string getGridEventOnClickString(GridViewRow gridRow,
> | System.Web.UI.WebControls.LinkButton lb, bool isFooterRow, int
> dataRowIndex,
> | bool causeValidation, string clientSideEventHandlerName,
> NameValueCollection
> | actionParameters)
> | {
> | string validationGroup = "donotValidate";
> | if (causeValidation)
> | validationGroup = ID;
> |
> | string uniqId = this.UniqueID + getControlIndex(isFooterRow,
> | dataRowIndex) + lb.UniqueID;
> | if (!string.IsNullOrEmpty(clientSideEventHandlerName) )
> | {
> | List<string> parameters = new List<string>();
> | parameters.Add("''");
> | if (actionParameters != null && actionParameters.Count > 0)
> | {
> | parameters.Clear();
> | Type gridType = gridRow.DataItem.GetType();
> | foreach (string propertyName in actionParameters.AllKeys)
> | {
> | if (actionParameters[propertyName] != null)
> | {
> | string controlId = actionParameters[propertyName];
> | object propertyValue =
> | gridType.GetProperty(propertyName).GetValue(gridRo w.DataItem, null);
> | if (PropertyUtilities.IsNullValue(propertyValue))
> | propertyValue = string.Empty;
> | parameters.Add(controlId + "~" + propertyValue);
> | }
> | }
> | }
> |
> | return string.Format("return
> |
> handleThenFireButtonEvent(\"{0}\",\"{1}\",\"{2}\", {3},\"{4}\",\"{5}\",\"{6}\
> ",\"{7}\",\"{8}\")",
> | "this", GridPostbackEvent, clientSideEventHandlerName, "true",
> | string.Join("-", parameters.ToArray()), validationGroup, uniqId,
> | lb.CommandArgument, UpdatePanelId);
> | }
> | object[] args = new object[] { };
> | return string.Format("return
> |
> validateAndFireButtonEventGroup(\"{0}\",\"{1}\",\" {2}\",\"{3}\",\"{4}\",\"{5
> }\")",
> | "this", GridPostbackEvent, validationGroup, uniqId, lb.CommandArgument,
> | UpdatePanelId);
> | }
> | #endregion
> |
> | #region private TableRow addActionCell()
> | private void addActionCell(GridViewRow gr,
> | System.Web.UI.WebControls.LinkButton lb)
> | {
> | System.Web.UI.WebControls.TableCell tc = new TableCell();
> | tc.Controls.Add(lb);
> | ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
> | }
> | #endregion
> |
> | #region private TableRow addEmptyCell()
> | private void addEmptyCell(GridViewRow gr)
> | {
> | System.Web.UI.WebControls.TableCell tc = new TableCell();
> | tc.Text = "&nbsp;&nbsp;";
> | ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
> | }
> | #endregion
> |
> | #region private void removeActionCell()
> | private void removeActionCell(GridViewRow gr)
> | {
> | TableCell[] tmpcell = new TableCell[gr.Cells.Count];
> | gr.Cells.CopyTo(tmpcell, 0);
> | foreach (TableCell c in tmpcell)
> | {
> | System.Web.UI.Control ctrl = new
> System.Web.UI.Control();
> | if (c.Controls.Count > 0)
> | ctrl = c.Controls[0];
> | if (ctrl != null && ctrl.GetType().Name == "LinkButton")
> | gr.Cells.Remove(c);
> | }
> |
> | }
> | #endregion
> |
> | #region private void setEachControlValues()
> | private void setEachControlValues(System.Web.UI.Control ec,
> object
> | objItems)
> | {
> | switch (ec.GetType().Name)
> | {
> | case "TextBox":
> | TextBox ctrlText = (TextBox)ec;
> | setControlValue(ctrlText.ID, ctrlText.Text,
> objItems);
> | break;
> | case "HiddenField":
> | HiddenField ctrl = (HiddenField )ec;
> | setControlValue(ctrl.ID, ctrl.Value, objItems);
> | break;
> | case "DateBox":
> | DateBox ctrlDB = (DateBox)ec;
> | setControlValue(ctrlDB.ID, ctrlDB.Text, objItems);
> | break;
> | case "DateTimeBox":
> | DateTimeBox ctrlDTB = (DateTimeBox)ec;
> | setControlValue(ctrlDTB.ID, ctrlDTB.Text, objItems);
> | break;
> | case "CheckBox":
> | CheckBox ctrlCheck = (CheckBox)ec;
> | string valueToSet = "N";
> | if (ctrlCheck.Checked)
> | valueToSet = "Y";
> | setControlValue(ctrlCheck.ID, valueToSet, objItems);
> | break;
> | case "DropDownList":
> | DropDownList ctrldrp = (DropDownList)ec;
> | setControlValue(ctrldrp.ID, ctrldrp.SelectedValue,
> | objItems);
> | break;
> | //also needs to set the ctrldrp.Text to the label
> control
> | //in the Items templates
> | case "RadioButtonList":
> | RadioButtonList ctrlRdo = (RadioButtonList)ec;
> | setControlValue(ctrlRdo.ID, ctrlRdo.SelectedValue,
> | objItems);
> | break;
> | case "Label":
> | Label ctrlLabel = (Label)ec;
> | setControlValue(ctrlLabel.ID, ctrlLabel.Text,
> objItems);
> | break;
> | }
> |
> | }
> |
> | #endregion
> |
> | #region public GridViewMetaData MetaData
> | private GridViewMetaData _MetaData;
> | public GridViewMetaData MetaData
> | {
> | get { return _MetaData; }
> | set { _MetaData = value; }
> | }
> | #endregion
> |
> | #region public string DomainObjectName
> | private string _domainObjectName;
> | public string DomainObjectName
> | {
> | get { return _domainObjectName; }
> | set { _domainObjectName = value; }
> | }
> | #endregion
> |
> | #region public string DomainObjectListKey
> | private string _DomainObjectListKey;
> | public string DomainObjectListKey
> | {
> | get { return _DomainObjectListKey; }
> | set { _DomainObjectListKey = value; }
> | }
> | #endregion
> |
> | #region public string MetaDataId
> | private string _MetaDataId;
> | public string MetaDataId
> | {
> | get { return _MetaDataId; }
> | set { _MetaDataId = value; }
> | }
> | #endregion
> |
> | #region public string GridPostbackEvent
> | private string _GridPostbackEvent;
> | public string GridPostbackEvent
> | {
> | get { return _GridPostbackEvent; }
> | set { _GridPostbackEvent = value; }
> | }
> | #endregion
> |
> | #region public bool BypassGridEvent
> | private bool _BypassGridEvent = false;
> | public bool BypassGridEvent
> | {
> | get { return _BypassGridEvent; }
> | set { _BypassGridEvent = value; }
> | }
> | #endregion
> |
> | #region public bool ShowGridViewEditButtons
> | private bool _ShowGridViewEditButtons;
> | public bool ShowGridViewEditButtons
> | {
> | get { return _ShowGridViewEditButtons; }
> | set { _ShowGridViewEditButtons = value; }
> | }
> | #endregion
> |
> | #region public string PropertyName
> | private string _PropertyName = string.Empty;
> | public string PropertyName
> | {
> | get { return _PropertyName; }
> | set { _PropertyName = value; }
> | }
> | #endregion
> |
> | #region private Array getAddedItems()
> | private Array getAddedItems(IList oldList, object addedItems)
> | {
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | Utils.Utils.GetCurrentControllerData();
> | int arrayLength = 1;
> | if (oldList != null && oldList.Count > 0)
> | arrayLength = oldList.Count + 1;
> | Array arrayItems =
> Array.CreateInstance(addedItems.GetType(),
> | arrayLength);
> | int i = 0;
> | if (oldList != null && oldList.Count > 0)
> | {
> | foreach (IDomainObject dm in oldList)
> | {
> | arrayItems.SetValue(dm, i);
> | i++;
> | }
> | }
> | arrayItems.SetValue(addedItems, i);
> | return arrayItems;
> | }
> | #endregion
> |
> | #region private Array getUpdatedItems()
> | private Array getUpdatedItems(IList oldList, object
> updatedItems,
> | Type domainObjectType, int rowIndex, string propertyToUpdate, bool
> value)
> | {
> | //Also set the HasBeenEdited/HasBeenDeleted field with the
> value
> | true/false..
> | setControlValue(propertyToUpdate, value, updatedItems);
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | Utils.Utils.GetCurrentControllerData();
> | Array arrayItems = Array.CreateInstance(domainObjectType,
> | oldList.Count);
> | int i = 0;
> | foreach (IDomainObject dm in oldList)
> | {
> | if (i == rowIndex)//if the row index match the current object then
> | replace the displayed column's values with the updated one
> | {
> | foreach (GridViewColumnMetaData columnMetaData in MetaData.Columns)
> | {
> | if (columnMetaData.IsDisplayed)
> | {
> | PropertyUtilities.SetValue(dm, columnMetaData.PropertyName,
> | PropertyUtilities.GetValue((IDomainObject)updatedI tems,
> | columnMetaData.PropertyName));
> | }
> | }
> | }
> | // also set hasbeenEdited/hasbeenDeleted with true/false
> | setControlValue(propertyToUpdate, value, dm);
> | arrayItems.SetValue(dm, i);
> | i++;
> | }
> | return arrayItems;
> | }
> | #endregion
> |
> | #region private Array getRemovedItems()
> | private Array getRemovedItems(IList oldList, object
> removedItems,
> | int rowIndex)
> | {
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | Utils.Utils.GetCurrentControllerData();
> | Array arrayItemsToCopy =
> | Array.CreateInstance(removedItems.GetType(), oldList.Count);
> | Array arrayItems =
> Array.CreateInstance(removedItems.GetType(),
> | oldList.Count - 1);
> | int i = 0;
> | foreach (IDomainObject dm in oldList)
> | {
> | if (i != rowIndex)//if the row index match the current
> | object then remove it(do not add to list)
> | arrayItemsToCopy.SetValue(dm, i);
> | i++;
> | }
> |
> | int newArrayCount = 0;
> | for (int j = 0; j < arrayItemsToCopy.Length; j++)
> | {
> | if (arrayItemsToCopy.GetValue(j) != null)
> | {
> | arrayItems.SetValue(arrayItemsToCopy.GetValue(j),
> | newArrayCount);
> | newArrayCount++;
> | }
> | }
> |
> | return arrayItems;
> | }
> | #endregion
> |
> | #region private void setControlValue()
> | private void setControlValue(string propertyName, object value,
> | object dObject)
> | {
> | PropertyInfo pi = null;
> | pi = dObject.GetType().GetProperty(propertyName);
> | SNF.Model.PropertyUtilities.SetValue((IDomainObjec t)dObject,
> pi,
> | value);
> |
> | }
> | #endregion
> |
> | #region private void setPropertyArrayValue()
> | private void setPropertyArrayValue(Array arrayItems)
> | {
> |
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | Utils.Utils.GetCurrentControllerData();
> | IDomainObject domainObject =
> CurrentControllerData.DomainObject;
> | PropertyInfo pi =
> | domainObject.GetType().GetProperty(PropertyName);
> | pi.SetValue(domainObject, arrayItems, null);
> | }
> | #endregion
> |
> | #region private void ProcessControllerEvent()
> | private void ProcessControllerEvent(string eventName)
> | {
> | // Process the current event
> |
> | MyPrj.SNF.Web.Controller.RequestContext
> CurrentRequestContext
> =
> | Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
> | MyPrj.SNF.Web.Controller.RequestContext;
> | MyPrj.SNF.Web.Controller.ControllerData
> CurrentControllerData
> =
> | CurrentRequestContext.CurrentControllerData;
> | CurrentControllerData.EventName = eventName;
> |
> | MyPrj.SNF.Web.Controller.ProcessResult pr =
> | MyPrj.SNF.Web.Controller.EventProcessor.ProcessEve nt(
> | CurrentRequestContext, CurrentControllerData.StateId,
> | CurrentControllerData.EventName);
> |
> | CurrentControllerData.EventName = pr.EventName; // Capture
> the
> | EventName from the result;
> | }
> | #endregion
> |
> | #region private void addAjaxSupport()
> | private void addAjaxSupport(bool add)
> | {
> | ScriptManager
> | sm = ScriptManager.GetCurrent(Page);
> | if (sm == null)
> | throw new HttpException("A ScriptManager control must
> exist
> | on the current page.");
> | UpdatePanel updatePanel = new UpdatePanel();
> | updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
> | updatePanel.ID = "updatePanel" + this.ID;
> | updatePanel.ContentTemplateContainer.Controls.Add( this);
> | this.Controls.Add(updatePanel);
> | }
> | #endregion
> |
> | #region -- section to show/hide empty header and footer rows
> |
> | private GridViewRow _headerRow;
> | private GridViewRow _footerRow;
> |
> | private bool _showHeaderWhenEmpty;
> | private bool _showFooterWhenEmpty;
> |
> | public bool ShowHeaderWhenEmpty
> | {
> | get { return _showHeaderWhenEmpty; }
> | set { _showHeaderWhenEmpty = value; }
> | }
> |
> | public bool ShowFooterWhenEmpty
> | {
> | get { return _showFooterWhenEmpty; }
> | set { _showFooterWhenEmpty = value; }
> | }
> |
> | public override GridViewRow HeaderRow
> | {
> | get { return base.HeaderRow ?? _headerRow; }
> | }
> |
> | public override GridViewRow FooterRow
> | {
> | get { return base.FooterRow ?? _footerRow; }
> | }
> |
> | private void InitializeRow(GridViewRow row, DataControlField[]
> | fields, TableRowCollection newRows)
> | {
> | GridViewRowEventArgs e = new GridViewRowEventArgs(row);
> | InitializeRow(row, fields);
> | OnRowCreated(e);
> | newRows.Add(row);
> | row.DataBind();
> | OnRowDataBound(e);
> | row.DataItem = null;
> | }
> |
> | #endregion
> |
> | #region protected void SetupStyleAndBehaviour ()
> | protected virtual void SetupStyleAndBehaviour()
> | {
> | EnableViewState = false;
> | AutoGenerateColumns = false;
> |
> | AllowSorting = true;
> | AllowPaging = true;
> | EnableSortingAndPagingCallbacks = false;
> | AutoGenerateSelectButton = false;
> | AutoGenerateDeleteButton = false;
> | AutoGenerateEditButton = false;
> |
> | ShowHeader = true;
> | ShowFooter = true;
> | EmptyDataText = "No records found";
> |
> | CssClass = "grid";
> | CellPadding = 3;
> | CellSpacing = 0;
> | GridLines = GridLines.Horizontal;
> |
> | PageSize = 20;
> | PagerStyle.CssClass = "gridPager";
> | PagerSettings.FirstPageText = "<<";
> | PagerSettings.PreviousPageText = "<";
> | PagerSettings.NextPageText = ">";
> | PagerSettings.LastPageText = ">>";
> | PagerSettings.PageButtonCount = 10;
> | PagerSettings.Mode = PagerButtons.NumericFirstLast;
> |
> | RowStyle.CssClass = "gridRow";
> | SelectedRowStyle.CssClass = "gridSelectedRow";
> | HeaderStyle.CssClass = "gridViewHeader";
> | FooterStyle.CssClass = "gridfooter";
> | AlternatingRowStyle.CssClass = "gridAlternatingRow";
> | RemovedItemCssClass = "gridDeletedRow";
> | }
> | #endregion
> |
> | #region public GridViewMode GridMode
> | private GridViewMode _GridMode = GridViewMode.Editable;
> | /// <summary>
> | ///
> | /// </summary>
> | public GridViewMode GridMode
> | {
> | get { return _GridMode; }
> | set { _GridMode = value; }
> | }
> | #endregion
> |
> | #region Custom Management of SortExpression & SortDirection
> |
> | #region public string CSSortExpression
> | private string _CSSortExpression;
> | public string CSSortExpression
> | {
> | get { return _CSSortExpression; }
> | set { _CSSortExpression = value; }
> | }
> | #endregion
> |
> | #region public SortDirection CSSortDirection
> | private MyPrj.SNF.Application.SortDirection _CSSortDirection;
> | public MyPrj.SNF.Application.SortDirection CSSortDirection
> | {
> | get { return _CSSortDirection; }
> | set { _CSSortDirection = value; }
> | }
> | #endregion
> |
> | #endregion Custom Management of SortExpression & SortDirection
> |
> | #region public string RemovedItemCssClass
> | private string _RemovedItemCssClass;
> | public string RemovedItemCssClass
> | {
> | get { return _RemovedItemCssClass; }
> | set { _RemovedItemCssClass = value; }
> | }
> | #endregion
> |
> | #region public string UpdatePanelId
> | private string _UpdatePanelId;
> | public string UpdatePanelId
> | {
> | get { return _UpdatePanelId; }
> | set { _UpdatePanelId = value; }
> | }
> | #endregion
> | }
> | }
> |
> |
> |
> | "TS" <> wrote in message
> | news:...
> | > hello, I have 2 new issues:
> | >
> | > 1. My control is overriding OnRowCreated and it calls
> base.OnRowCreated
> | > and on my aspx.cs page i am attaching an event handler to this
> RowCreated
> | > but it is not running. I also tried to add an event handler to
> | > RowDataBound and calling base.OnRowDataBound and it doesnt get called
> in
> | > aspx.cs either.
> | >
> | > What could be the cause of this? I dont understand since i'm calling
> base
> | > implementation (which seeing the code thru reflector it calls any
> attached
> | > handlers)
> | >
> | > 2. This is related somehow to first point. As stated in the first
> problem
> | > you already resolved, i attached event handlers in my custom control
> | > instead of overriding them and that caused my event handlers on
> aspx.cs
> | > page to be called correctly for most of them. When i tried to attach
> event
> | > handler for RowCreated in custom control, it is not called, but when I
> | > override OnRowCreated it is called. Even when I attached event handler
> for
> | > RowCreated in custom control AND aspx.cs page, neither were called.
> The
> | > grid events that I am currently using successfully on aspx.cs are
> | > RowUpdating and RowEditing, both of which are also attached event
> handlers
> | > in custom control.
> | >
> | > thanks
> | >
> | > "Allen Chen [MSFT]" <v-> wrote in message
> | > news:iuX$...
> | >> Hi,
> | >>
> | >> Do you have any further questions? If you have please provide some
> code
> | >> so
> | >> that I can test it on my side.
> | >>
> | >> Regards,
> | >> Allen Chen
> | >> Microsoft Online Community Support
> | >>
> | >> --------------------
> | >> | From: "TS" <>
> | >> | References: <#>
> | >> <#>
> | >> <>
> | >> <A3AFHn$>
> | >> | Subject: Re: overriding GridView.OnRowDeleting - can call
> registered
> | >> event handlers
> | >> | Date: Wed, 22 Oct 2008 11:07:08 -0500
> | >> | Lines: 223
> | >> | X-Priority: 3
> | >> | X-MSMail-Priority: Normal
> | >> | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
> | >> | X-RFC2646: Format=Flowed; Original
> | >> | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
> | >> | Message-ID: <>
> | >> | Newsgroups:
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> | NNTP-Posting-Host: 168.38.106.193
> | >> | Path:
> TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
> | >> | Xref: TK2MSFTNGHUB02.phx.gbl
> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1142
> | >> | X-Tomcat-NG:
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> |
> | >> | that did it, but for some reason the delegates for DataBinding was
> not
> | >> | getting called, but that method does call base.DataBind, so make it
> | >> | overridable is OK, though not sure why it wasnt getting called
> | >> |
> | >> | "Allen Chen [MSFT]" <v-> wrote in
> message
> | >> | news:A3AFHn$...
> | >> | > Hi,
> | >> | >
> | >> | > Thanks for your clarification. To achieve your requirement I
> would
> | >> suggest
> | >> | > you attach an event handler in the constructor method instead of
> | >> | > overriding
> | >> | > the OnRowDeleting method.
> | >> | >
> | >> | > public class MyGridView : GridView
> | >> | > {
> | >> | >
> | >> | > public MyGridView()
> | >> | > {
> | >> | > this.RowDeleting += new
> | >> | > GridViewDeleteEventHandler(MyGridView_RowDeleting) ;
> | >> | > }
> | >> | > void MyGridView_RowDeleting(object sender,
> | >> GridViewDeleteEventArgs
> | >> | > e)
> | >> | > {
> | >> | > //Your code here
> | >> | > }
> | >> | > }
> | >> | >
> | >> | > Please have a try and let me know if it's what you need.
> | >> | >
> | >> | > Regards,
> | >> | > Allen Chen
> | >> | > Microsoft Online Support
> | >> | >
> | >> | > --------------------
> | >> | > | From: "TS" <>
> | >> | > | References: <#>
> | >> | > <#>
> | >> | > | Subject: Re: overriding GridView.OnRowDeleting - can call
> | >> registered
> | >> | > event handlers
> | >> | > | Date: Tue, 21 Oct 2008 11:38:04 -0500
> | >> | > | Lines: 136
> | >> | > | X-Priority: 3
> | >> | > | X-MSMail-Priority: Normal
> | >> | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
> | >> | > | X-RFC2646: Format=Flowed; Original
> | >> | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
> | >> | > | Message-ID: <>
> | >> | > | Newsgroups:
> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> | > | NNTP-Posting-Host: 168.38.106.193
> | >> | > | Path:
> | >> TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP03.phx.gbl
> | >> | > | Xref: TK2MSFTNGHUB02.phx.gbl
> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1140
> | >> | > | X-Tomcat-NG:
> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> | > |
> | >> | > | So it looks like the "else if" section of the posted code below
> is
> | >> | > getting
> | >> | > | run, which throws an exception and this is why that
> | >> base.OnRowDeleting
> | >> | > is
> | >> | > | commented out. Our custom OnRowDeleting does a lot of stuff in
> it
> | >> that
> | >> | > is
> | >> | > | common to every grid. The only thing the base class does is
> call
> | >> any
> | >> | > | registered delegates. So if we dont add event handler in aspx
> page
> | >> for
> | >> | > | onRowDeleting, the base class will throw this error.
> | >> | > |
> | >> | > | We want to not have to attach custom event handlers in every
> aspx
> | >> page
> | >> | > that
> | >> | > | uses the grid control and just let our custom gridView handle
> all
> | >> the
> | >> | > | processing in all the grid events (onRowEditing, onRowUpdating,
> | >> | > | onRowDeleting, etc.), but I need to be able to support
> overriding
> | >> this
> | >> | > | behavior sometimes by adding a custom event handler in my aspx
> | >> page.
> | >> | > |
> | >> | > | Could I override the each Event Handler's add/remove properties
> so
> | >> that
> | >> | > i
> | >> | > | can handle the Event[] collection myself and then i'll be able
> to
> | >> call
> | >> | > the
> | >> | > | individually registered delegates?
> | >> | > | public event GridViewDeleteEventHandler RowDeleting
> | >> | > |
> | >> | > | {
> | >> | > |
> | >> | > | add
> | >> | > |
> | >> | > | {
> | >> | > |
> | >> | > | base.Events.AddHandler(EventRowDeleting, value);
> | >> | > |
> | >> | > | }
> | >> | > |
> | >> | > | remove
> | >> | > |
> | >> | > | {
> | >> | > |
> | >> | > | base.Events.RemoveHandler(EventRowDeleting, value);
> | >> | > |
> | >> | > | }
> | >> | > |
> | >> | > | }
> | >> | > |
> | >> | > |
> | >> | > | "Allen Chen [MSFT]" <v-> wrote in
> | >> message
> | >> | > | news:%...
> | >> | > | > Hi,
> | >> | > | >
> | >> | > | > As you said, it's a private field so we cannot access it in
> the
> | >> custom
> | >> | > | > GridView. I think we'd better focus on your following
> statement:
> | >> | > | >
> | >> | > | > I have a custom GridView and it overrides onRowDeleting and
> | >> doesn't
> | >> | > | > call base.OnRowDeleting because the person implementing had
> | >> | > undesirable
> | >> | > | > effects.
> | >> | > | >
> | >> | > | > Could you tell me what're the undesirable effects and your
> | >> requirement
> | >> | > as
> | >> | > | > well? I think if we can eliminate them this issue can be
> worked
> | >> | > around.
> | >> | > | >
> | >> | > | > Regards,
> | >> | > | > Allen Chen
> | >> | > | > Microsoft Online Support
> | >> | > | >
> | >> | > | > Delighting our customers is our #1 priority. We welcome your
> | >> comments
> | >> | > and
> | >> | > | > suggestions about how we can improve the support we provide
> to
> | >> you.
> | >> | > Please
> | >> | > | > feel free to let my manager know what you think of the level
> of
> | >> | > service
> | >> | > | > provided. You can send feedback directly to my manager at:
> | >> | > | > .
> | >> | > | >
> | >> | > | > ==================================================
> | >> | > | > Get notification to my posts through email? Please refer to
> | >> | > | >
> | >> | >
> | >>
> http://msdn.microsoft.com/en-us/subs...#notifications.
> | >> | > | >
> | >> | > | > Note: The MSDN Managed Newsgroup support offering is for
> | >> non-urgent
> | >> | > issues
> | >> | > | > where an initial response from the community or a Microsoft
> | >> Support
> | >> | > | > Engineer within 1 business day is acceptable. Please note
> that
> | >> each
> | >> | > follow
> | >> | > | > up response may take approximately 2 business days as the
> support
> | >> | > | > professional working with you may need further investigation
> to
> | >> reach
> | >> | > the
> | >> | > | > most efficient resolution. The offering is not appropriate
> for
> | >> | > situations
> | >> | > | > that require urgent, real-time or phone-based interactions or
> | >> complex
> | >> | > | > project analysis and dump analysis issues. Issues of this
> nature
> | >> are
> | >> | > best
> | >> | > | > handled working with a dedicated Microsoft Support Engineer
> by
> | >> | > contacting
> | >> | > | > Microsoft Customer Support Services (CSS) at
> | >> | > | >
> | >> | >
> | >>
> http://support.microsoft.com/select/...tance&ln=en-us.
> | >> | > | > ==================================================
> | >> | > | > This posting is provided "AS IS" with no warranties, and
> confers
> | >> no
> | >> | > | > rights.
> | >> | > | >
> | >> | > | > --------------------
> | >> | > | > | From: "TS" <>
> | >> | > | > | Subject: overriding GridView.OnRowDeleting - can call
> | >> registered
> | >> | > event
> | >> | > | > handlers
> | >> | > | > | Date: Mon, 20 Oct 2008 16:17:30 -0500
> | >> | > | > | Lines: 24
> | >> | > | > | X-Priority: 3
> | >> | > | > | X-MSMail-Priority: Normal
> | >> | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
> | >> | > | > | X-RFC2646: Format=Flowed; Original
> | >> | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
> | >> | > | > | Message-ID: <#>
> | >> | > | > | Newsgroups:
> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> | > | > | NNTP-Posting-Host: 168.38.106.193
> | >> | > | > | Path:
> | >> | > TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
> | >> | > | > | Xref: TK2MSFTNGHUB02.phx.gbl
> | >> | > | >
> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1138
> | >> | > | > | X-Tomcat-NG:
> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
> | >> | > | > |
> | >> | > | > | Hello, I have a custom GridView and it overrides
> onRowDeleting
> | >> and
> | >> | > | > doesn't
> | >> | > | > | call base.OnRowDeleting because the person implementing had
> | >> | > undesirable
> | >> | > | > | effects. the problem is I now when clients of this control
> | >> register
> | >> | > | > their
> | >> | > | > | own event handlers for RowDeleting, it is never raised.
> | >> | > | > |
> | >> | > | > | I'm trying to add lines 1 - 5 to my overriden OnRowDeleting
> | >> method
> | >> | > but
> | >> | > | > can't
> | >> | > | > | because the key accessed in base.Events is
> EventRowDeleting,
> | >> which
> | >> | > is
> | >> | > an
> | >> | > | > | object that is a private constant that i dont have access
> to
> in
> | >> my
> | >> | > | > derived
> | >> | > | > | control.
> | >> | > | > |
> | >> | > | > | How do I get a handle to any event handlers so I can call
> | >> them???
> | >> | > | > |
> | >> | > | > | // this is the dissasembled method for GridView:
> | >> | > | > | protected virtual void
> OnRowDeleting(GridViewDeleteEventArgs
> | >> e){
> | >> | > | > bool
> | >> | > | > | isBoundUsingDataSourceID = base.IsBoundUsingDataSourceID;1
> | >> | > | > | GridViewDeleteEventHandler handler =
> | >> (GridViewDeleteEventHandler)
> | >> | > | > | base.Events[EventRowDeleting];2 if (handler != null)3
> {4
> | >> | > | > | handler(this, e);5 } else if
> (!isBoundUsingDataSourceID
> | >> &&
> | >> | > | > !e.Cancel)
> | >> | > | > | { throw new
> | >> | > | > HttpException(SR.GetString("GridView_UnhandledEven t",
> | >> | > | > | new object[] { this.ID, "RowDeleting" })); }}
> | >> | > | > |
> | >> | > | > |
> | >> | > | > |
> | >> | > | > |
> | >> | > | > |
> | >> | > | >
> | >> | > |
> | >> | > |
> | >> | > |
> | >> | >
> | >> |
> | >> |
> | >> |
> | >>
> | >
> | >
> |
> |
> |
>



 
Reply With Quote
 
 
 
 
TS
Guest
Posts: n/a
 
      11-11-2008
Resolution has been made...the issue was due to the wiring up of the events
happening at page_load. Putting that code in page_init solved the problem.
The reason the events were getting raised when clicking the grid's event
buttons is because those events are post back events which are called after
page_load so having the wiring at page_load worked for those.


"TS" <> wrote in message
news:...
> sent it today
>
> "Allen Chen [MSFT]" <v-> wrote in message
> news:...
>> Hi,
>>
>> Have you sent the demo to me?
>>
>> Regards,
>> Allen Chen
>> Microsoft Online Support
>> --------------------
>> | From: "TS" <>
>> | References: <#>
>> <#>
>> <>
>> <A3AFHn$>
>> <>
>> <iuX$>
>> <>
>> | Subject: Re: overriding GridView.OnRowDeleting - can call registered
>> event handlers
>> | Date: Wed, 29 Oct 2008 11:08:23 -0500
>> | Lines: 1559
>> | X-Priority: 3
>> | X-MSMail-Priority: Normal
>> | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
>> | X-RFC2646: Format=Flowed; Response
>> | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
>> | Message-ID: <>
>> | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | NNTP-Posting-Host: 168.38.106.113
>> | Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP05.phx.gbl
>> | Xref: TK2MSFTNGHUB02.phx.gbl
>> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1147
>> | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> |
>> | I see now that all the events get raised when I click one of the grid's
>> | buttons to fire Edit, Update, etc. So on default data binding of the
>> grid,
>> | on just load of the page, the events are not getting raised. Sounds
>> like
>> | something is missing from the control's code:
>> |
>> | using System;
>> | using System.Collections;
>> | using System.Collections.Specialized;
>> | using System.Collections.Generic;
>> | using System.Web.UI.WebControls;
>> | using System.Web.UI;
>> | using System.Reflection;
>> | using MyPrj.SNF.Model;
>> | using MyPrj.SNF.Application;
>> | using System.Data;
>> | using System.Web;
>> | /// <summary>
>> | /// Summary description for EditableGrid
>> | /// </summary>
>> |
>> | namespace MyPrj.SNF.Web.Control
>> | {
>> |
>> | public class EditableGrid : System.Web.UI.WebControls.GridView
>> | {
>> | public EditableGrid()
>> | {
>> | //
>> | // TODO: Add constructor logic here
>> | //
>> | ShowFooter = true;
>> | ShowHeader = true;
>> | ShowFooterWhenEmpty = true;
>> | ShowHeaderWhenEmpty = true;
>> | ShowGridViewEditButtons = true;
>> | GridPostbackEvent = "GridReload";
>> | EmptyDataText = "No Records Found";
>> | EnableViewState = false;
>> | SetupStyleAndBehaviour();
>> | }
>> |
>> | #region Events
>> | #region protected override void OnLoad(EventArgs e)
>> | protected override void OnLoad(EventArgs e)
>> | {
>> | base.OnLoad(e);
>> | #region Add Delegates for all grid events
>> | // Add delegates instead of overriding for all the grid events that
>> dont
>> | need to call base's implementation, otherwise
>> | // every aspx page would have to have a delegate for each grid event
>> that
>> | was supported for that grid on that page
>> |
>> | // Note: do in OnLoad so that the individual aspx pages can also do
>> this
>> | in their OnLoad and have their events
>> | // run first so that the BypassGridEvent flag can be set to true to
>> | bypass execution here.
>> | this.RowCommand += new
>> | GridViewCommandEventHandler(EditableGrid_RowComman d);
>> | this.RowEditing += new
>> GridViewEditEventHandler(EditableGrid_RowEditing);
>> | this.RowCancelingEdit += new
>> | GridViewCancelEditEventHandler(EditableGrid_RowCan celingEdit);
>> | this.RowUpdating += new
>> | GridViewUpdateEventHandler(EditableGrid_RowUpdatin g);
>> | this.RowDeleting += new
>> | GridViewDeleteEventHandler(EditableGrid_RowDeletin g);
>> | this.Sorting += new GridViewSortEventHandler(EditableGrid_Sorting);
>> | this.PageIndexChanged += new
>> EventHandler(EditableGrid_PageIndexChanged);
>> | #endregion
>> | }
>> | #endregion
>> | #region protected override int CreateChildControls(IEnumerable
>> dataSource,
>> | bool dataBinding)
>> | protected override int CreateChildControls(IEnumerable dataSource,
>> bool
>> | dataBinding)
>> | {
>> | int rows = base.CreateChildControls(dataSource,
>> dataBinding);
>> |
>> | // no data rows created, create empty table if enabled
>> | if (rows == 0 && (ShowFooterWhenEmpty ||
>> ShowHeaderWhenEmpty))
>> | {
>> | // create the table
>> | Table table = CreateChildTable();
>> | Controls.Clear();
>> | Controls.Add(table);
>> | DataControlField[] fields;
>> | if (AutoGenerateColumns)
>> | {
>> | PagedDataSource source = new PagedDataSource();
>> | source.DataSource = dataSource;
>> | ICollection autoGeneratedColumns =
>> CreateColumns(source,
>> | true);
>> | fields = new
>> | DataControlField[autoGeneratedColumns.Count];
>> | autoGeneratedColumns.CopyTo(fields, 0);
>> | }
>> | else
>> | {
>> | fields = new DataControlField[Columns.Count];
>> | Columns.CopyTo(fields, 0);
>> | }
>> |
>> | TableRowCollection newRows = table.Rows;
>> | if (ShowHeaderWhenEmpty)
>> | {
>> | // create a new header row
>> | _headerRow = CreateRow(-1, -1,
>> | DataControlRowType.Header, DataControlRowState.Normal);
>> | InitializeRow(_headerRow, fields, newRows);
>> | }
>> |
>> | //// create the empty row
>> | GridViewRow emptyRow = new GridViewRow(-1, -1,
>> | DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
>> | TableCell cell = new TableCell();
>> | cell.ColumnSpan = fields.Length;
>> | cell.Width = Unit.Percentage(100);
>> | //
>> | if (EmptyDataTemplate != null)
>> | {
>> | EmptyDataTemplate.InstantiateIn(cell);
>> | }
>> | else if (!string.IsNullOrEmpty(EmptyDataText))
>> | //else if (!string.IsNullOrEmpty(EmptyDataText) &&
>> | MyPrj.SNF.Web.Utils.Utils.InReadMode())
>> | {
>> | cell.Controls.Add(new
>> LiteralControl(EmptyDataText));
>> | }
>> | emptyRow.Cells.Add(cell);
>> | GridViewRowEventArgs e = new
>> GridViewRowEventArgs(emptyRow);
>> | OnRowCreated(e);
>> | newRows.Add(emptyRow);
>> | emptyRow.DataBind();
>> | OnRowDataBound(e);
>> | emptyRow.DataItem = null;
>> | if (ShowFooterWhenEmpty &&
>> | !MyPrj.SNF.Web.Utils.Utils.InReadMode())
>> | {
>> | // create footer row
>> | _footerRow = CreateRow(-1, -1,
>> | DataControlRowType.Footer, DataControlRowState.Normal);
>> | InitializeRow(_footerRow, fields, newRows);
>> | }
>> | }
>> | return rows;
>> | }
>> | #endregion
>> | #region protected override void Render()
>> | protected override void Render(HtmlTextWriter writer)
>> | {
>> | if (DataSource != null && GridMode ==
>> GridViewMode.Editable)
>> | {
>> | IList listRows = DataSource as IList;
>> | int rowIndex = 0;
>> | string itemCountHiddenField = "<input type=\"hidden\"
>> | name=\"" + this.PropertyName + "Count" + "\" id=\"" + this.PropertyName
>> +
>> | "Count" + "\" value=\"" + listRows.Count.ToString() + "\" />";
>> | writer.WriteLine(itemCountHiddenField);
>> | foreach (MyPrj.SNF.Model.IDomainObject domainObject in
>> | listRows)
>> | {
>> | foreach (GridViewColumnMetaData columnMetaData in
>> | MetaData.Columns)
>> | {
>> | object propValue =
>> | Utils.Utils.GetPropertyValue(domainObject,
>> columnMetaData.PropertyName);
>> | string propertyValue = string.Empty;
>> | if (propValue != null)
>> | propertyValue = propValue.ToString();
>> | // Replace line breaks with a single space
>> | // Escape Double Quotes & backslashes so the
>> value
>> | can be put safely into the array and hidden fields
>> | propertyValue = propertyValue.Replace("\r\n", "
>> | ").Replace(@"\", @"\\").Replace(@"""", "\\\"");
>> |
>> |
>> | string hiddenFieldId = (PropertyName + "_" +
>> | rowIndex + "_" + columnMetaData.PropertyName);
>> | string hiddenFieldToRender = "<input
>> type=\"hidden\"
>> | name=\"" + hiddenFieldId + "\" id=\"" + hiddenFieldId + "\" value=\"" +
>> | propertyValue + "\" />";
>> | writer.WriteLine(hiddenFieldToRender);
>> | }
>> | rowIndex++;
>> | }
>> | }
>> | base.Render(writer);
>> | RenderHiddenFieldsForActions();
>> | }
>> | #endregion
>> | #region protected override void LoadControlState()
>> | /// <summary>
>> | /// Manages the Sort information.
>> | /// </summary>
>> | /// <param name="savedState"></param>
>> | protected override void LoadControlState(object savedState)
>> | {
>> | object[] states = (object[])savedState;
>> | base.LoadControlState(states[0]);
>> |
>> | CSSortExpression = (string)states[1];
>> | CSSortDirection =
>> | (MyPrj.SNF.Application.SortDirection)states[2];
>> | }
>> | #endregion
>> | #region protected override object SaveControlState()
>> | protected override object SaveControlState()
>> | {
>> | object[] states = new object[3];
>> | states[0] = base.SaveControlState();
>> |
>> | states[1] = CSSortExpression;
>> | states[2] = CSSortDirection;
>> |
>> | return states;
>> | }
>> | #endregion
>> | protected override void OnDataBinding(EventArgs e)
>> | {
>> | DataSource = Utils.Utils.GetPropertyValue(PropertyName) as
>> | IList;
>> | addColumns();
>> | base.OnDataBinding(e);
>> | }
>> | protected override void OnRowCreated(GridViewRowEventArgs e)
>> | {
>> | if (e.Row.DataItem != null && e.Row.RowType ==
>> | DataControlRowType.DataRow)
>> | {
>> | object isRowDeleted =
>> | Utils.Utils.GetPropertyValue((IDomainObject)e.Row. DataItem,
>> | "HasBeenDeleted");
>> | addRowEvents(e.Row, (bool)isRowDeleted);
>> | }
>> |
>> | #region Add footer row events
>> | if (MetaData != null && EditIndex < 0 && e.Row.RowType ==
>> | DataControlRowType.Footer)
>> | {
>> | foreach (GridViewActionInfo actionInfo in MetaData.Actions)
>> | {
>> | System.Web.UI.WebControls.LinkButton lb = new
>> | System.Web.UI.WebControls.LinkButton();
>> | if (actionInfo.EventLocation ==
>> | GridViewActionInfo.EventLocationCode.FooterRow)
>> | {
>> | lb.Text = actionInfo.DisplayName;
>> | lb.ID = "lnk" + this.ID + actionInfo.EventName;
>> | lb.CommandName = actionInfo.CommandType.ToString();
>> | lb.CausesValidation = actionInfo.CausesValidation;
>> | lb.ValidationGroup = this.ID;
>> | lb.OnClientClick = getGridEventOnClickString(e.Row,
>> lb,
>> | true, 0, actionInfo.CausesValidation,
>> actionInfo.ClientSideEventHandlerName,
>> | actionInfo.ActionParameters);
>> | lb.Attributes.Add("href", "#");
>> | addActionCell(e.Row, lb);
>> | TableHeaderCell c = new TableHeaderCell();
>> | c.Text = "";
>> | HeaderRow.Cells.Add(c);
>> | }
>> | }
>> | }
>> | #endregion
>> |
>> | base.OnRowCreated(e);
>> | }
>> | #region Delegated Events
>> |
>> | #region void EditableGrid_RowEditing(object sender,
>> GridViewEditEventArgs
>> | e)
>> | void EditableGrid_RowEditing(object sender, GridViewEditEventArgs e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | this.EditIndex = e.NewEditIndex;
>> | this.DataBind();
>> | }
>> | #endregion
>> | #region void EditableGrid_RowDeleting(object sender,
>> | GridViewDeleteEventArgs e)
>> | void EditableGrid_RowDeleting(object sender, GridViewDeleteEventArgs
>> e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | this.EditIndex = -1;
>> | Type domainObjectType = Type.GetType(DomainObjectName);
>> | object objItems = Activator.CreateInstance(domainObjectType);
>> | Array dataSourceItems = DataSource as Array;
>> | objItems = dataSourceItems.GetValue(e.RowIndex);
>> | Array updatedItems = getUpdatedItems((IList)DataSource, objItems,
>> | domainObjectType, e.RowIndex, "HasBeenDeleted", true);
>> | setPropertyArrayValue(updatedItems);
>> | this.DataSource = updatedItems as IList;
>> | this.DataBind();
>> | }
>> | #endregion
>> | #region void EditableGrid_RowUpdating(object sender,
>> | GridViewUpdateEventArgs e)
>> | void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs
>> e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | this.EditIndex = -1;
>> | Type domainObjectType = Type.GetType(DomainObjectName);
>> | object objItems =
>> Activator.CreateInstance(domainObjectType);
>> | foreach (System.Web.UI.Control c in
>> | this.Rows[e.RowIndex].Controls)
>> | {
>> | //First level is table cell level.. we need to go one
>> more
>> | level..
>> | if (c is DataControlFieldCell && c.Controls.Count > 0)
>> | {
>> | System.Web.UI.Control ec = c.Controls[0] as
>> | System.Web.UI.Control;
>> | setEachControlValues(ec, objItems);
>> | }
>> | }
>> |
>> | Array updatedItems = getUpdatedItems((IList)DataSource,
>> | objItems, domainObjectType, e.RowIndex, "HasBeenEdited", true);
>> | setPropertyArrayValue(updatedItems);
>> | this.DataSource = updatedItems as IList;
>> | this.DataBind();
>> | }
>> | #endregion
>> | #region void EditableGrid_RowCommand(object sender,
>> | GridViewCommandEventArgs e)
>> | void EditableGrid_RowCommand(object sender, GridViewCommandEventArgs
>> e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | #region -- insert new row code here
>> |
>> | if (e.CommandName.Equals("Add"))
>> | {
>> | //Here we have to get each item value from the
>> controls.
>> | Type domainObjectType = Type.GetType(DomainObjectName);
>> | object objItems =
>> | Activator.CreateInstance(domainObjectType);
>> | foreach (System.Web.UI.Control c in
>> this.FooterRow.Controls)
>> | {
>> | //First level is table cell level.. we
>> | //need to go one more level..
>> | if (c.GetType().Name == "DataControlFieldCell" &&
>> | c.Controls.Count > 0)
>> | {
>> | System.Web.UI.Control ec = c.Controls[0] as
>> | System.Web.UI.Control;
>> | setEachControlValues(ec, objItems);
>> | }
>> | }
>> |
>> | Array addedItems = getAddedItems((IList)DataSource,
>> | objItems);
>> | setPropertyArrayValue(addedItems);
>> | this.DataSource = addedItems as IList;
>> | this.DataBind();
>> | }
>> |
>> | #endregion
>> |
>> | #region -- restore rows here
>> |
>> | if (e.CommandName.Equals("Restore"))
>> | {
>> | this.EditIndex = -1;
>> | Type domainObjectType = Type.GetType(DomainObjectName);
>> | object objItems =
>> | Activator.CreateInstance(domainObjectType);
>> | Array dataSourceItems = DataSource as Array;
>> | objItems =
>> | dataSourceItems.GetValue(Convert.ToInt32(e.Command Argument));
>> | Array updatedItems = getUpdatedItems((IList)DataSource,
>> | objItems, domainObjectType, Convert.ToInt32(e.CommandArgument),
>> | "HasBeenDeleted", false);
>> | setPropertyArrayValue(updatedItems);
>> | this.DataSource = updatedItems as IList;
>> | this.DataBind();
>> | }
>> |
>> | #endregion
>> | }
>> | #endregion
>> | #region void EditableGrid_RowCancelingEdit(object sender,
>> | GridViewCancelEditEventArgs e)
>> | void EditableGrid_RowCancelingEdit(object sender,
>> | GridViewCancelEditEventArgs e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | this.EditIndex = -1;
>> | this.DataBind();
>> | }
>> | #endregion
>> | #region void EditableGrid_Sorting(object sender,
>> | GridViewSortEventArgs e)
>> | void EditableGrid_Sorting(object sender, GridViewSortEventArgs
>> e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | MyPrj.SNF.Web.Controller.RequestContext
>> CurrentRequestContext
>> =
>> | Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
>> | MyPrj.SNF.Web.Controller.RequestContext;
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | CurrentRequestContext.CurrentControllerData;
>> |
>> | if (CSSortExpression !=
>> | ((GridViewSortEventArgs)e).SortExpression)
>> | CSSortDirection =
>> | MyPrj.SNF.Application.SortDirection.Ascending;
>> | else
>> | CSSortDirection = (CSSortDirection ==
>> | MyPrj.SNF.Application.SortDirection.Descending) ?
>> | MyPrj.SNF.Application.SortDirection.Ascending :
>> | MyPrj.SNF.Application.SortDirection.Descending;
>> |
>> | CSSortExpression =
>> ((GridViewSortEventArgs)e).SortExpression;
>> | Array.Sort(DataSource as Array, new
>> | MyPrj.SNF.Application.ClassComparer(CSSortExpressi on,
>> CSSortDirection));
>> | this.DataBind();
>> | }
>> | #endregion
>> | #region void EditableGrid_PageIndexChanged(object sender,
>> EventArgs
>> | e)
>> | void EditableGrid_PageIndexChanged(object sender, EventArgs e)
>> | {
>> | if (BypassGridEvent)
>> | return;
>> |
>> | bool displayLastPage = false;
>> | //try
>> | //{
>> | if (((GridViewPageEventArgs)e).NewPageIndex > -1)
>> | PageIndex =
>> ((GridViewPageEventArgs)e).NewPageIndex;
>> | else
>> | displayLastPage = true;
>> | IList list = DataSource as IList;
>> | if (displayLastPage)
>> | PageIndex = (int)Math.Ceiling(((double)list.Count /
>> | PageSize)) - 1;
>> | this.DataBind();
>> | //}
>> | //catch (Exception expGeneral)
>> | //{
>> | // throw;
>> | //}
>> | }
>> |
>> | #endregion
>> |
>> | #endregion
>> | #endregion
>> |
>> | #region void addColumns()
>> |
>> | private void addColumns()
>> | {
>> | if (MetaData == null)
>> | MetaData =
>> GridViewMetaData.GetGridViewMetaData(MetaDataId);
>> | Columns.Clear();
>> |
>> | #region - all the controls
>> |
>> | foreach (GridViewColumnMetaData columnMetaData in
>> | MetaData.Columns)
>> | {
>> |
>> | if (columnMetaData.IsDisplayed)
>> | {
>> | TemplateField columnField = new TemplateField();
>> | columnField.HeaderText = columnMetaData.HeaderText;
>> | if (columnMetaData.IsSortable)
>> | columnField.SortExpression =
>> | columnMetaData.SortPropertyName;
>> | columnField.ItemStyle.HorizontalAlign =
>> | columnMetaData.HorizontalAlign;
>> | columnField.ItemStyle.Width = columnMetaData.Width;
>> |
>> | if (GridMode == GridViewMode.Editable)
>> | {
>> | columnField.ItemTemplate = new
>> | GridViewTemplate(ListItemType.Item, MetaData, columnMetaData, this.ID);
>> | columnField.EditItemTemplate = new
>> | GridViewTemplate(ListItemType.EditItem, MetaData, columnMetaData,
>> this.ID);
>> |
>> | if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
>> | this.EditIndex < 0)
>> | {
>> | columnField.FooterTemplate = new
>> | GridViewTemplate(ListItemType.Footer, MetaData, columnMetaData,
>> this.ID);
>> | }
>> | }
>> | //Add the newly created bound field to the
>> GridView.
>> | Columns.Add(columnField);
>> | }
>> | }
>> |
>> | #endregion
>> |
>> | #region ------- add check box to each row if render
>> selection
>> is
>> | specified
>> |
>> |
>> | if ((MetaData.ShowSelectionInReadMode &&
>> | MyPrj.SNF.Web.Utils.Utils.InReadMode()) ||
>> | (MetaData.ShowSelectionInEditableMode &&
>> | !MyPrj.SNF.Web.Utils.Utils.InReadMode()))
>> | {
>> | GridViewColumnMetaData gvMetaData = new
>> | GridViewColumnMetaData(MetaData.SelectionPropertyN ame, "Select",
>> false);
>> | gvMetaData.ColumnType = "DomainObjectSelection";
>> | TemplateField selectionField = new TemplateField();
>> | selectionField.ItemTemplate = new
>> | GridViewTemplate(ListItemType.EditItem, MetaData, gvMetaData, this.ID);
>> | Columns.Add(selectionField);
>> | }
>> |
>> | #endregion
>> |
>> | }
>> |
>> |
>> |
>> | #endregion
>> |
>> | #region private string getControlIndex()
>> | private string getControlIndex(bool isFooterRow, int
>> dataRowIndex)
>> | {
>> | //This is not a real code......????
>> | //what do i do if there is no option..
>> | string controlIndex = "";
>> | int startCount = 0;
>> |
>> | if (isFooterRow)
>> | {
>> | startCount = 3;
>> | if (Rows.Count > 1)
>> | startCount = 3 + (Rows.Count - 1);
>> |
>> | if (startCount < 10)
>> | controlIndex = "$ctl0" + startCount.ToString() +
>> "$";
>> | else
>> | controlIndex = "$ctl" + startCount.ToString() +
>> "$";
>> | }
>> | else
>> | {
>> | startCount = 2 + dataRowIndex;
>> | if (startCount < 10)
>> | controlIndex = "$ctl0" + startCount.ToString() +
>> "$";
>> | else
>> | controlIndex = "$ctl" + startCount.ToString() +
>> "$";
>> | }
>> |
>> | return controlIndex;
>> | }
>> | #endregion
>> |
>> | #region private void addRowEvents(GridViewRow gr)
>> | private void addRowEvents(GridViewRow gr, bool isDeleted)
>> | {
>> |
>> | System.Web.UI.WebControls.LinkButton lb = new
>> | System.Web.UI.WebControls.LinkButton();
>> | if (!MyPrj.SNF.Web.Utils.Utils.InReadMode() &&
>> | ShowGridViewEditButtons)
>> | {
>> |
>> | #region //first add the data row events
>> |
>> | foreach (GridViewActionInfo actionInfo in
>> MetaData.Actions)
>> | {
>> | if (actionInfo.EventLocation ==
>> | GridViewActionInfo.EventLocationCode.DataRow)
>> | {
>> | lb = new
>> System.Web.UI.WebControls.LinkButton();
>> | lb.ID = "lnk" + this.ID + actionInfo.EventName;
>> | lb.Text = actionInfo.DisplayName;
>> | lb.CommandName =
>> actionInfo.CommandType.ToString();
>> | lb.ValidationGroup = this.ID;
>> | lb.CausesValidation =
>> actionInfo.CausesValidation;
>> | lb.Attributes.Add("href", "#");
>> | lb.OnClientClick =
>> getGridEventOnClickString(gr,
>> lb,
>> | false, gr.RowIndex, actionInfo.CausesValidation,
>> | actionInfo.ClientSideEventHandlerName, actionInfo.ActionParameters);
>> |
>> |
>> | if (actionInfo.CommandType ==
>> | GridViewActionInfo.CommandTypeCode.SNF)
>> | lb.OnClientClick =
>> | getSNFOnclickString(actionInfo, gr);
>> | else if (isDeleted && actionInfo.CommandType ==
>> | GridViewActionInfo.CommandTypeCode.Restore)
>> | {
>> | //If its deleted row then just show the
>> restore
>> | event and return
>> | removeActionCell(gr);
>> | //set the deleted row css class
>> | gr.CssClass = RemovedItemCssClass;
>> | lb.CommandArgument =
>> gr.RowIndex.ToString();
>> | addActionCell(gr, lb);
>> | addEmptyCell(gr);
>> | return;
>> | }
>> |
>> |
>> | bool addThis = false;
>> | if (EditIndex == gr.RowIndex &&
>> | (actionInfo.CommandType == GridViewActionInfo.CommandTypeCode.Update ||
>> | actionInfo.CommandType ==
>> | GridViewActionInfo.CommandTypeCode.Cancel))
>> | addThis = true;
>> | else if (EditIndex < 0 && EditIndex !=
>> gr.RowIndex
>> | && (actionInfo.CommandType != GridViewActionInfo.CommandTypeCode.Update
>> &&
>> | actionInfo.CommandType !=
>> | GridViewActionInfo.CommandTypeCode.Cancel && actionInfo.CommandType !=
>> | GridViewActionInfo.CommandTypeCode.Restore))
>> | addThis = true;
>> |
>> | if (addThis)
>> | addActionCell(gr, lb);
>> |
>> | }
>> | }
>> |
>> | #endregion
>> |
>> |
>> | #region //Add header row for the event
>> |
>> | TableHeaderCell c = new TableHeaderCell();
>> | c.Text = "";
>> | HeaderRow.Cells.Add(c);
>> |
>> | #endregion
>> |
>> | }
>> | }
>> | #endregion
>> |
>> | #region protected void RenderHiddenFieldsForActions()
>> | protected void RenderHiddenFieldsForActions()
>> | {
>> | if (MetaData == null || MetaData.Actions == null ||
>> | MetaData.Actions.Count < 1 || DataSource == null ||
>> | ((IList)DataSource).Count == 0)
>> | return;
>> |
>> | Hashtable hiddenFieldIds = new Hashtable();
>> | foreach (GridViewActionInfo actionInfo in MetaData.Actions)
>> | {
>> | if (actionInfo.ActionParameters != null)
>> | {
>> | foreach (string argumentName in
>> | actionInfo.ActionParameters.AllKeys)
>> | {
>> | if
>> |
>> (!hiddenFieldIds.ContainsKey(actionInfo.ActionPara meters[argumentName]))
>> |
>> hiddenFieldIds[actionInfo.ActionParameters[argumentName]]
>> | = null;
>> | }
>> | }
>> | }
>> | foreach (string hiddenFieldId in hiddenFieldIds.Keys)
>> | {
>> | // Add the Hidden Field only if the page doesn't
>> already
>> | contain a control with same ID
>> | if (!Utils.Utils.IsControlOnPage(Page, hiddenFieldId))
>> | {
>> | //For ajax postback we will have to register the
>> hidden
>> | fields
>> | ScriptManager sm = ScriptManager.GetCurrent(Page);
>> | if (sm != null && sm.IsInAsyncPostBack)
>> |
>> System.Web.UI.ScriptManager.RegisterHiddenField(th is,
>> | hiddenFieldId, string.Empty);
>> | else
>> |
>> Page.ClientScript.RegisterHiddenField(hiddenFieldI d,
>> | string.Empty);
>> | }
>> | }
>> | }
>> | #endregion
>> |
>> | #region private string getSNFOnclickString(GridViewActionInfo
>> | actionInfo,GridViewRow gr)
>> | private string getSNFOnclickString(GridViewActionInfo
>> actionInfo,
>> | GridViewRow gr)
>> | {
>> | System.Text.StringBuilder sb = new
>> System.Text.StringBuilder();
>> | if (actionInfo.ActionParameters != null &&
>> | actionInfo.ActionParameters.Count > 0)
>> | {
>> | Type gridType = gr.DataItem.GetType();
>> | List<string> parameters = new List<string>();
>> | foreach (string propertyName in
>> actionInfo.ActionParameters.AllKeys)
>> | {
>> | if (actionInfo.ActionParameters[propertyName] !=
>> null)
>> | {
>> | string controlId =
>> | actionInfo.ActionParameters[propertyName];
>> | object propertyValue =
>> | gridType.GetProperty(propertyName).GetValue(gr.Dat aItem, null);
>> | if (PropertyUtilities.IsNullValue(propertyValue))
>> | propertyValue = string.Empty;
>> |
>> | parameters.Add(controlId + "~" + propertyValue);
>> | }
>> | }
>> | object[] args = new object[] { "this",
>> actionInfo.EventName,
>> | actionInfo.ClientSideEventHandlerName, string.Join("-",
>> | parameters.ToArray()), gr.RowIndex };
>> | return
>> |
>> string.Format("processGridViewEvent(\"{0}\",\"{1}\ ",\"{2}\",\"{3}\",\"{4}\")
>> ",
>> | args);
>> | }
>> | return string.Empty;
>> | }
>> | #endregion
>> |
>> | #region private string getGridEventOnClickString()
>> | private string getGridEventOnClickString(GridViewRow gridRow,
>> | System.Web.UI.WebControls.LinkButton lb, bool isFooterRow, int
>> dataRowIndex,
>> | bool causeValidation, string clientSideEventHandlerName,
>> NameValueCollection
>> | actionParameters)
>> | {
>> | string validationGroup = "donotValidate";
>> | if (causeValidation)
>> | validationGroup = ID;
>> |
>> | string uniqId = this.UniqueID +
>> getControlIndex(isFooterRow,
>> | dataRowIndex) + lb.UniqueID;
>> | if (!string.IsNullOrEmpty(clientSideEventHandlerName) )
>> | {
>> | List<string> parameters = new List<string>();
>> | parameters.Add("''");
>> | if (actionParameters != null && actionParameters.Count > 0)
>> | {
>> | parameters.Clear();
>> | Type gridType = gridRow.DataItem.GetType();
>> | foreach (string propertyName in actionParameters.AllKeys)
>> | {
>> | if (actionParameters[propertyName] != null)
>> | {
>> | string controlId = actionParameters[propertyName];
>> | object propertyValue =
>> | gridType.GetProperty(propertyName).GetValue(gridRo w.DataItem, null);
>> | if (PropertyUtilities.IsNullValue(propertyValue))
>> | propertyValue = string.Empty;
>> | parameters.Add(controlId + "~" + propertyValue);
>> | }
>> | }
>> | }
>> |
>> | return string.Format("return
>> |
>> handleThenFireButtonEvent(\"{0}\",\"{1}\",\"{2}\", {3},\"{4}\",\"{5}\",\"{6}\
>> ",\"{7}\",\"{8}\")",
>> | "this", GridPostbackEvent, clientSideEventHandlerName, "true",
>> | string.Join("-", parameters.ToArray()), validationGroup, uniqId,
>> | lb.CommandArgument, UpdatePanelId);
>> | }
>> | object[] args = new object[] { };
>> | return string.Format("return
>> |
>> validateAndFireButtonEventGroup(\"{0}\",\"{1}\",\" {2}\",\"{3}\",\"{4}\",\"{5
>> }\")",
>> | "this", GridPostbackEvent, validationGroup, uniqId, lb.CommandArgument,
>> | UpdatePanelId);
>> | }
>> | #endregion
>> |
>> | #region private TableRow addActionCell()
>> | private void addActionCell(GridViewRow gr,
>> | System.Web.UI.WebControls.LinkButton lb)
>> | {
>> | System.Web.UI.WebControls.TableCell tc = new TableCell();
>> | tc.Controls.Add(lb);
>> | ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
>> | }
>> | #endregion
>> |
>> | #region private TableRow addEmptyCell()
>> | private void addEmptyCell(GridViewRow gr)
>> | {
>> | System.Web.UI.WebControls.TableCell tc = new TableCell();
>> | tc.Text = "&nbsp;&nbsp;";
>> | ((System.Web.UI.WebControls.TableRow)(gr)).Cells.A dd(tc);
>> | }
>> | #endregion
>> |
>> | #region private void removeActionCell()
>> | private void removeActionCell(GridViewRow gr)
>> | {
>> | TableCell[] tmpcell = new TableCell[gr.Cells.Count];
>> | gr.Cells.CopyTo(tmpcell, 0);
>> | foreach (TableCell c in tmpcell)
>> | {
>> | System.Web.UI.Control ctrl = new
>> System.Web.UI.Control();
>> | if (c.Controls.Count > 0)
>> | ctrl = c.Controls[0];
>> | if (ctrl != null && ctrl.GetType().Name ==
>> "LinkButton")
>> | gr.Cells.Remove(c);
>> | }
>> |
>> | }
>> | #endregion
>> |
>> | #region private void setEachControlValues()
>> | private void setEachControlValues(System.Web.UI.Control ec,
>> object
>> | objItems)
>> | {
>> | switch (ec.GetType().Name)
>> | {
>> | case "TextBox":
>> | TextBox ctrlText = (TextBox)ec;
>> | setControlValue(ctrlText.ID, ctrlText.Text,
>> objItems);
>> | break;
>> | case "HiddenField":
>> | HiddenField ctrl = (HiddenField )ec;
>> | setControlValue(ctrl.ID, ctrl.Value, objItems);
>> | break;
>> | case "DateBox":
>> | DateBox ctrlDB = (DateBox)ec;
>> | setControlValue(ctrlDB.ID, ctrlDB.Text, objItems);
>> | break;
>> | case "DateTimeBox":
>> | DateTimeBox ctrlDTB = (DateTimeBox)ec;
>> | setControlValue(ctrlDTB.ID, ctrlDTB.Text,
>> objItems);
>> | break;
>> | case "CheckBox":
>> | CheckBox ctrlCheck = (CheckBox)ec;
>> | string valueToSet = "N";
>> | if (ctrlCheck.Checked)
>> | valueToSet = "Y";
>> | setControlValue(ctrlCheck.ID, valueToSet,
>> objItems);
>> | break;
>> | case "DropDownList":
>> | DropDownList ctrldrp = (DropDownList)ec;
>> | setControlValue(ctrldrp.ID, ctrldrp.SelectedValue,
>> | objItems);
>> | break;
>> | //also needs to set the ctrldrp.Text to the label
>> control
>> | //in the Items templates
>> | case "RadioButtonList":
>> | RadioButtonList ctrlRdo = (RadioButtonList)ec;
>> | setControlValue(ctrlRdo.ID, ctrlRdo.SelectedValue,
>> | objItems);
>> | break;
>> | case "Label":
>> | Label ctrlLabel = (Label)ec;
>> | setControlValue(ctrlLabel.ID, ctrlLabel.Text,
>> objItems);
>> | break;
>> | }
>> |
>> | }
>> |
>> | #endregion
>> |
>> | #region public GridViewMetaData MetaData
>> | private GridViewMetaData _MetaData;
>> | public GridViewMetaData MetaData
>> | {
>> | get { return _MetaData; }
>> | set { _MetaData = value; }
>> | }
>> | #endregion
>> |
>> | #region public string DomainObjectName
>> | private string _domainObjectName;
>> | public string DomainObjectName
>> | {
>> | get { return _domainObjectName; }
>> | set { _domainObjectName = value; }
>> | }
>> | #endregion
>> |
>> | #region public string DomainObjectListKey
>> | private string _DomainObjectListKey;
>> | public string DomainObjectListKey
>> | {
>> | get { return _DomainObjectListKey; }
>> | set { _DomainObjectListKey = value; }
>> | }
>> | #endregion
>> |
>> | #region public string MetaDataId
>> | private string _MetaDataId;
>> | public string MetaDataId
>> | {
>> | get { return _MetaDataId; }
>> | set { _MetaDataId = value; }
>> | }
>> | #endregion
>> |
>> | #region public string GridPostbackEvent
>> | private string _GridPostbackEvent;
>> | public string GridPostbackEvent
>> | {
>> | get { return _GridPostbackEvent; }
>> | set { _GridPostbackEvent = value; }
>> | }
>> | #endregion
>> |
>> | #region public bool BypassGridEvent
>> | private bool _BypassGridEvent = false;
>> | public bool BypassGridEvent
>> | {
>> | get { return _BypassGridEvent; }
>> | set { _BypassGridEvent = value; }
>> | }
>> | #endregion
>> |
>> | #region public bool ShowGridViewEditButtons
>> | private bool _ShowGridViewEditButtons;
>> | public bool ShowGridViewEditButtons
>> | {
>> | get { return _ShowGridViewEditButtons; }
>> | set { _ShowGridViewEditButtons = value; }
>> | }
>> | #endregion
>> |
>> | #region public string PropertyName
>> | private string _PropertyName = string.Empty;
>> | public string PropertyName
>> | {
>> | get { return _PropertyName; }
>> | set { _PropertyName = value; }
>> | }
>> | #endregion
>> |
>> | #region private Array getAddedItems()
>> | private Array getAddedItems(IList oldList, object addedItems)
>> | {
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | Utils.Utils.GetCurrentControllerData();
>> | int arrayLength = 1;
>> | if (oldList != null && oldList.Count > 0)
>> | arrayLength = oldList.Count + 1;
>> | Array arrayItems =
>> Array.CreateInstance(addedItems.GetType(),
>> | arrayLength);
>> | int i = 0;
>> | if (oldList != null && oldList.Count > 0)
>> | {
>> | foreach (IDomainObject dm in oldList)
>> | {
>> | arrayItems.SetValue(dm, i);
>> | i++;
>> | }
>> | }
>> | arrayItems.SetValue(addedItems, i);
>> | return arrayItems;
>> | }
>> | #endregion
>> |
>> | #region private Array getUpdatedItems()
>> | private Array getUpdatedItems(IList oldList, object
>> updatedItems,
>> | Type domainObjectType, int rowIndex, string propertyToUpdate, bool
>> value)
>> | {
>> | //Also set the HasBeenEdited/HasBeenDeleted field with the
>> value
>> | true/false..
>> | setControlValue(propertyToUpdate, value, updatedItems);
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | Utils.Utils.GetCurrentControllerData();
>> | Array arrayItems = Array.CreateInstance(domainObjectType,
>> | oldList.Count);
>> | int i = 0;
>> | foreach (IDomainObject dm in oldList)
>> | {
>> | if (i == rowIndex)//if the row index match the current object then
>> | replace the displayed column's values with the updated one
>> | {
>> | foreach (GridViewColumnMetaData columnMetaData in
>> MetaData.Columns)
>> | {
>> | if (columnMetaData.IsDisplayed)
>> | {
>> | PropertyUtilities.SetValue(dm, columnMetaData.PropertyName,
>> | PropertyUtilities.GetValue((IDomainObject)updatedI tems,
>> | columnMetaData.PropertyName));
>> | }
>> | }
>> | }
>> | // also set hasbeenEdited/hasbeenDeleted with true/false
>> | setControlValue(propertyToUpdate, value, dm);
>> | arrayItems.SetValue(dm, i);
>> | i++;
>> | }
>> | return arrayItems;
>> | }
>> | #endregion
>> |
>> | #region private Array getRemovedItems()
>> | private Array getRemovedItems(IList oldList, object
>> removedItems,
>> | int rowIndex)
>> | {
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | Utils.Utils.GetCurrentControllerData();
>> | Array arrayItemsToCopy =
>> | Array.CreateInstance(removedItems.GetType(), oldList.Count);
>> | Array arrayItems =
>> Array.CreateInstance(removedItems.GetType(),
>> | oldList.Count - 1);
>> | int i = 0;
>> | foreach (IDomainObject dm in oldList)
>> | {
>> | if (i != rowIndex)//if the row index match the current
>> | object then remove it(do not add to list)
>> | arrayItemsToCopy.SetValue(dm, i);
>> | i++;
>> | }
>> |
>> | int newArrayCount = 0;
>> | for (int j = 0; j < arrayItemsToCopy.Length; j++)
>> | {
>> | if (arrayItemsToCopy.GetValue(j) != null)
>> | {
>> | arrayItems.SetValue(arrayItemsToCopy.GetValue(j),
>> | newArrayCount);
>> | newArrayCount++;
>> | }
>> | }
>> |
>> | return arrayItems;
>> | }
>> | #endregion
>> |
>> | #region private void setControlValue()
>> | private void setControlValue(string propertyName, object value,
>> | object dObject)
>> | {
>> | PropertyInfo pi = null;
>> | pi = dObject.GetType().GetProperty(propertyName);
>> |
>> SNF.Model.PropertyUtilities.SetValue((IDomainObjec t)dObject,
>> pi,
>> | value);
>> |
>> | }
>> | #endregion
>> |
>> | #region private void setPropertyArrayValue()
>> | private void setPropertyArrayValue(Array arrayItems)
>> | {
>> |
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | Utils.Utils.GetCurrentControllerData();
>> | IDomainObject domainObject =
>> CurrentControllerData.DomainObject;
>> | PropertyInfo pi =
>> | domainObject.GetType().GetProperty(PropertyName);
>> | pi.SetValue(domainObject, arrayItems, null);
>> | }
>> | #endregion
>> |
>> | #region private void ProcessControllerEvent()
>> | private void ProcessControllerEvent(string eventName)
>> | {
>> | // Process the current event
>> |
>> | MyPrj.SNF.Web.Controller.RequestContext
>> CurrentRequestContext
>> =
>> | Context.Items[MyPrj.SNF.Application.Definition.RequestContext] as
>> | MyPrj.SNF.Web.Controller.RequestContext;
>> | MyPrj.SNF.Web.Controller.ControllerData
>> CurrentControllerData
>> =
>> | CurrentRequestContext.CurrentControllerData;
>> | CurrentControllerData.EventName = eventName;
>> |
>> | MyPrj.SNF.Web.Controller.ProcessResult pr =
>> | MyPrj.SNF.Web.Controller.EventProcessor.ProcessEve nt(
>> | CurrentRequestContext, CurrentControllerData.StateId,
>> | CurrentControllerData.EventName);
>> |
>> | CurrentControllerData.EventName = pr.EventName; // Capture
>> the
>> | EventName from the result;
>> | }
>> | #endregion
>> |
>> | #region private void addAjaxSupport()
>> | private void addAjaxSupport(bool add)
>> | {
>> | ScriptManager
>> | sm = ScriptManager.GetCurrent(Page);
>> | if (sm == null)
>> | throw new HttpException("A ScriptManager control must
>> exist
>> | on the current page.");
>> | UpdatePanel updatePanel = new UpdatePanel();
>> | updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
>> | updatePanel.ID = "updatePanel" + this.ID;
>> | updatePanel.ContentTemplateContainer.Controls.Add( this);
>> | this.Controls.Add(updatePanel);
>> | }
>> | #endregion
>> |
>> | #region -- section to show/hide empty header and footer rows
>> |
>> | private GridViewRow _headerRow;
>> | private GridViewRow _footerRow;
>> |
>> | private bool _showHeaderWhenEmpty;
>> | private bool _showFooterWhenEmpty;
>> |
>> | public bool ShowHeaderWhenEmpty
>> | {
>> | get { return _showHeaderWhenEmpty; }
>> | set { _showHeaderWhenEmpty = value; }
>> | }
>> |
>> | public bool ShowFooterWhenEmpty
>> | {
>> | get { return _showFooterWhenEmpty; }
>> | set { _showFooterWhenEmpty = value; }
>> | }
>> |
>> | public override GridViewRow HeaderRow
>> | {
>> | get { return base.HeaderRow ?? _headerRow; }
>> | }
>> |
>> | public override GridViewRow FooterRow
>> | {
>> | get { return base.FooterRow ?? _footerRow; }
>> | }
>> |
>> | private void InitializeRow(GridViewRow row, DataControlField[]
>> | fields, TableRowCollection newRows)
>> | {
>> | GridViewRowEventArgs e = new GridViewRowEventArgs(row);
>> | InitializeRow(row, fields);
>> | OnRowCreated(e);
>> | newRows.Add(row);
>> | row.DataBind();
>> | OnRowDataBound(e);
>> | row.DataItem = null;
>> | }
>> |
>> | #endregion
>> |
>> | #region protected void SetupStyleAndBehaviour ()
>> | protected virtual void SetupStyleAndBehaviour()
>> | {
>> | EnableViewState = false;
>> | AutoGenerateColumns = false;
>> |
>> | AllowSorting = true;
>> | AllowPaging = true;
>> | EnableSortingAndPagingCallbacks = false;
>> | AutoGenerateSelectButton = false;
>> | AutoGenerateDeleteButton = false;
>> | AutoGenerateEditButton = false;
>> |
>> | ShowHeader = true;
>> | ShowFooter = true;
>> | EmptyDataText = "No records found";
>> |
>> | CssClass = "grid";
>> | CellPadding = 3;
>> | CellSpacing = 0;
>> | GridLines = GridLines.Horizontal;
>> |
>> | PageSize = 20;
>> | PagerStyle.CssClass = "gridPager";
>> | PagerSettings.FirstPageText = "<<";
>> | PagerSettings.PreviousPageText = "<";
>> | PagerSettings.NextPageText = ">";
>> | PagerSettings.LastPageText = ">>";
>> | PagerSettings.PageButtonCount = 10;
>> | PagerSettings.Mode = PagerButtons.NumericFirstLast;
>> |
>> | RowStyle.CssClass = "gridRow";
>> | SelectedRowStyle.CssClass = "gridSelectedRow";
>> | HeaderStyle.CssClass = "gridViewHeader";
>> | FooterStyle.CssClass = "gridfooter";
>> | AlternatingRowStyle.CssClass = "gridAlternatingRow";
>> | RemovedItemCssClass = "gridDeletedRow";
>> | }
>> | #endregion
>> |
>> | #region public GridViewMode GridMode
>> | private GridViewMode _GridMode = GridViewMode.Editable;
>> | /// <summary>
>> | ///
>> | /// </summary>
>> | public GridViewMode GridMode
>> | {
>> | get { return _GridMode; }
>> | set { _GridMode = value; }
>> | }
>> | #endregion
>> |
>> | #region Custom Management of SortExpression & SortDirection
>> |
>> | #region public string CSSortExpression
>> | private string _CSSortExpression;
>> | public string CSSortExpression
>> | {
>> | get { return _CSSortExpression; }
>> | set { _CSSortExpression = value; }
>> | }
>> | #endregion
>> |
>> | #region public SortDirection CSSortDirection
>> | private MyPrj.SNF.Application.SortDirection _CSSortDirection;
>> | public MyPrj.SNF.Application.SortDirection CSSortDirection
>> | {
>> | get { return _CSSortDirection; }
>> | set { _CSSortDirection = value; }
>> | }
>> | #endregion
>> |
>> | #endregion Custom Management of SortExpression & SortDirection
>> |
>> | #region public string RemovedItemCssClass
>> | private string _RemovedItemCssClass;
>> | public string RemovedItemCssClass
>> | {
>> | get { return _RemovedItemCssClass; }
>> | set { _RemovedItemCssClass = value; }
>> | }
>> | #endregion
>> |
>> | #region public string UpdatePanelId
>> | private string _UpdatePanelId;
>> | public string UpdatePanelId
>> | {
>> | get { return _UpdatePanelId; }
>> | set { _UpdatePanelId = value; }
>> | }
>> | #endregion
>> | }
>> | }
>> |
>> |
>> |
>> | "TS" <> wrote in message
>> | news:...
>> | > hello, I have 2 new issues:
>> | >
>> | > 1. My control is overriding OnRowCreated and it calls
>> base.OnRowCreated
>> | > and on my aspx.cs page i am attaching an event handler to this
>> RowCreated
>> | > but it is not running. I also tried to add an event handler to
>> | > RowDataBound and calling base.OnRowDataBound and it doesnt get called
>> in
>> | > aspx.cs either.
>> | >
>> | > What could be the cause of this? I dont understand since i'm calling
>> base
>> | > implementation (which seeing the code thru reflector it calls any
>> attached
>> | > handlers)
>> | >
>> | > 2. This is related somehow to first point. As stated in the first
>> problem
>> | > you already resolved, i attached event handlers in my custom control
>> | > instead of overriding them and that caused my event handlers on
>> aspx.cs
>> | > page to be called correctly for most of them. When i tried to attach
>> event
>> | > handler for RowCreated in custom control, it is not called, but when
>> I
>> | > override OnRowCreated it is called. Even when I attached event
>> handler
>> for
>> | > RowCreated in custom control AND aspx.cs page, neither were called.
>> The
>> | > grid events that I am currently using successfully on aspx.cs are
>> | > RowUpdating and RowEditing, both of which are also attached event
>> handlers
>> | > in custom control.
>> | >
>> | > thanks
>> | >
>> | > "Allen Chen [MSFT]" <v-> wrote in message
>> | > news:iuX$...
>> | >> Hi,
>> | >>
>> | >> Do you have any further questions? If you have please provide some
>> code
>> | >> so
>> | >> that I can test it on my side.
>> | >>
>> | >> Regards,
>> | >> Allen Chen
>> | >> Microsoft Online Community Support
>> | >>
>> | >> --------------------
>> | >> | From: "TS" <>
>> | >> | References: <#>
>> | >> <#>
>> | >> <>
>> | >> <A3AFHn$>
>> | >> | Subject: Re: overriding GridView.OnRowDeleting - can call
>> registered
>> | >> event handlers
>> | >> | Date: Wed, 22 Oct 2008 11:07:08 -0500
>> | >> | Lines: 223
>> | >> | X-Priority: 3
>> | >> | X-MSMail-Priority: Normal
>> | >> | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
>> | >> | X-RFC2646: Format=Flowed; Original
>> | >> | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
>> | >> | Message-ID: <>
>> | >> | Newsgroups:
>> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> | NNTP-Posting-Host: 168.38.106.193
>> | >> | Path:
>> TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
>> | >> | Xref: TK2MSFTNGHUB02.phx.gbl
>> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1142
>> | >> | X-Tomcat-NG:
>> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> |
>> | >> | that did it, but for some reason the delegates for DataBinding was
>> not
>> | >> | getting called, but that method does call base.DataBind, so make
>> it
>> | >> | overridable is OK, though not sure why it wasnt getting called
>> | >> |
>> | >> | "Allen Chen [MSFT]" <v-> wrote in
>> message
>> | >> | news:A3AFHn$...
>> | >> | > Hi,
>> | >> | >
>> | >> | > Thanks for your clarification. To achieve your requirement I
>> would
>> | >> suggest
>> | >> | > you attach an event handler in the constructor method instead of
>> | >> | > overriding
>> | >> | > the OnRowDeleting method.
>> | >> | >
>> | >> | > public class MyGridView : GridView
>> | >> | > {
>> | >> | >
>> | >> | > public MyGridView()
>> | >> | > {
>> | >> | > this.RowDeleting += new
>> | >> | > GridViewDeleteEventHandler(MyGridView_RowDeleting) ;
>> | >> | > }
>> | >> | > void MyGridView_RowDeleting(object sender,
>> | >> GridViewDeleteEventArgs
>> | >> | > e)
>> | >> | > {
>> | >> | > //Your code here
>> | >> | > }
>> | >> | > }
>> | >> | >
>> | >> | > Please have a try and let me know if it's what you need.
>> | >> | >
>> | >> | > Regards,
>> | >> | > Allen Chen
>> | >> | > Microsoft Online Support
>> | >> | >
>> | >> | > --------------------
>> | >> | > | From: "TS" <>
>> | >> | > | References: <#>
>> | >> | > <#>
>> | >> | > | Subject: Re: overriding GridView.OnRowDeleting - can call
>> | >> registered
>> | >> | > event handlers
>> | >> | > | Date: Tue, 21 Oct 2008 11:38:04 -0500
>> | >> | > | Lines: 136
>> | >> | > | X-Priority: 3
>> | >> | > | X-MSMail-Priority: Normal
>> | >> | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
>> | >> | > | X-RFC2646: Format=Flowed; Original
>> | >> | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
>> | >> | > | Message-ID: <>
>> | >> | > | Newsgroups:
>> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> | > | NNTP-Posting-Host: 168.38.106.193
>> | >> | > | Path:
>> | >> TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP03.phx.gbl
>> | >> | > | Xref: TK2MSFTNGHUB02.phx.gbl
>> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1140
>> | >> | > | X-Tomcat-NG:
>> | >> microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> | > |
>> | >> | > | So it looks like the "else if" section of the posted code
>> below
>> is
>> | >> | > getting
>> | >> | > | run, which throws an exception and this is why that
>> | >> base.OnRowDeleting
>> | >> | > is
>> | >> | > | commented out. Our custom OnRowDeleting does a lot of stuff in
>> it
>> | >> that
>> | >> | > is
>> | >> | > | common to every grid. The only thing the base class does is
>> call
>> | >> any
>> | >> | > | registered delegates. So if we dont add event handler in aspx
>> page
>> | >> for
>> | >> | > | onRowDeleting, the base class will throw this error.
>> | >> | > |
>> | >> | > | We want to not have to attach custom event handlers in every
>> aspx
>> | >> page
>> | >> | > that
>> | >> | > | uses the grid control and just let our custom gridView handle
>> all
>> | >> the
>> | >> | > | processing in all the grid events (onRowEditing,
>> onRowUpdating,
>> | >> | > | onRowDeleting, etc.), but I need to be able to support
>> overriding
>> | >> this
>> | >> | > | behavior sometimes by adding a custom event handler in my aspx
>> | >> page.
>> | >> | > |
>> | >> | > | Could I override the each Event Handler's add/remove
>> properties
>> so
>> | >> that
>> | >> | > i
>> | >> | > | can handle the Event[] collection myself and then i'll be able
>> to
>> | >> call
>> | >> | > the
>> | >> | > | individually registered delegates?
>> | >> | > | public event GridViewDeleteEventHandler RowDeleting
>> | >> | > |
>> | >> | > | {
>> | >> | > |
>> | >> | > | add
>> | >> | > |
>> | >> | > | {
>> | >> | > |
>> | >> | > | base.Events.AddHandler(EventRowDeleting, value);
>> | >> | > |
>> | >> | > | }
>> | >> | > |
>> | >> | > | remove
>> | >> | > |
>> | >> | > | {
>> | >> | > |
>> | >> | > | base.Events.RemoveHandler(EventRowDeleting, value);
>> | >> | > |
>> | >> | > | }
>> | >> | > |
>> | >> | > | }
>> | >> | > |
>> | >> | > |
>> | >> | > | "Allen Chen [MSFT]" <v-> wrote in
>> | >> message
>> | >> | > | news:%...
>> | >> | > | > Hi,
>> | >> | > | >
>> | >> | > | > As you said, it's a private field so we cannot access it in
>> the
>> | >> custom
>> | >> | > | > GridView. I think we'd better focus on your following
>> statement:
>> | >> | > | >
>> | >> | > | > I have a custom GridView and it overrides onRowDeleting and
>> | >> doesn't
>> | >> | > | > call base.OnRowDeleting because the person implementing had
>> | >> | > undesirable
>> | >> | > | > effects.
>> | >> | > | >
>> | >> | > | > Could you tell me what're the undesirable effects and your
>> | >> requirement
>> | >> | > as
>> | >> | > | > well? I think if we can eliminate them this issue can be
>> worked
>> | >> | > around.
>> | >> | > | >
>> | >> | > | > Regards,
>> | >> | > | > Allen Chen
>> | >> | > | > Microsoft Online Support
>> | >> | > | >
>> | >> | > | > Delighting our customers is our #1 priority. We welcome your
>> | >> comments
>> | >> | > and
>> | >> | > | > suggestions about how we can improve the support we provide
>> to
>> | >> you.
>> | >> | > Please
>> | >> | > | > feel free to let my manager know what you think of the level
>> of
>> | >> | > service
>> | >> | > | > provided. You can send feedback directly to my manager at:
>> | >> | > | > .
>> | >> | > | >
>> | >> | > | > ==================================================
>> | >> | > | > Get notification to my posts through email? Please refer to
>> | >> | > | >
>> | >> | >
>> | >>
>> http://msdn.microsoft.com/en-us/subs...#notifications.
>> | >> | > | >
>> | >> | > | > Note: The MSDN Managed Newsgroup support offering is for
>> | >> non-urgent
>> | >> | > issues
>> | >> | > | > where an initial response from the community or a Microsoft
>> | >> Support
>> | >> | > | > Engineer within 1 business day is acceptable. Please note
>> that
>> | >> each
>> | >> | > follow
>> | >> | > | > up response may take approximately 2 business days as the
>> support
>> | >> | > | > professional working with you may need further investigation
>> to
>> | >> reach
>> | >> | > the
>> | >> | > | > most efficient resolution. The offering is not appropriate
>> for
>> | >> | > situations
>> | >> | > | > that require urgent, real-time or phone-based interactions
>> or
>> | >> complex
>> | >> | > | > project analysis and dump analysis issues. Issues of this
>> nature
>> | >> are
>> | >> | > best
>> | >> | > | > handled working with a dedicated Microsoft Support Engineer
>> by
>> | >> | > contacting
>> | >> | > | > Microsoft Customer Support Services (CSS) at
>> | >> | > | >
>> | >> | >
>> | >>
>> http://support.microsoft.com/select/...tance&ln=en-us.
>> | >> | > | > ==================================================
>> | >> | > | > This posting is provided "AS IS" with no warranties, and
>> confers
>> | >> no
>> | >> | > | > rights.
>> | >> | > | >
>> | >> | > | > --------------------
>> | >> | > | > | From: "TS" <>
>> | >> | > | > | Subject: overriding GridView.OnRowDeleting - can call
>> | >> registered
>> | >> | > event
>> | >> | > | > handlers
>> | >> | > | > | Date: Mon, 20 Oct 2008 16:17:30 -0500
>> | >> | > | > | Lines: 24
>> | >> | > | > | X-Priority: 3
>> | >> | > | > | X-MSMail-Priority: Normal
>> | >> | > | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.3028
>> | >> | > | > | X-RFC2646: Format=Flowed; Original
>> | >> | > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
>> | >> | > | > | Message-ID: <#>
>> | >> | > | > | Newsgroups:
>> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> | > | > | NNTP-Posting-Host: 168.38.106.193
>> | >> | > | > | Path:
>> | >> | > TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSF TNGP02.phx.gbl
>> | >> | > | > | Xref: TK2MSFTNGHUB02.phx.gbl
>> | >> | > | >
>> microsoft.public.dotnet.framework.aspnet.buildingc ontrols:1138
>> | >> | > | > | X-Tomcat-NG:
>> | >> | > microsoft.public.dotnet.framework.aspnet.buildingc ontrols
>> | >> | > | > |
>> | >> | > | > | Hello, I have a custom GridView and it overrides
>> onRowDeleting
>> | >> and
>> | >> | > | > doesn't
>> | >> | > | > | call base.OnRowDeleting because the person implementing
>> had
>> | >> | > undesirable
>> | >> | > | > | effects. the problem is I now when clients of this control
>> | >> register
>> | >> | > | > their
>> | >> | > | > | own event handlers for RowDeleting, it is never raised.
>> | >> | > | > |
>> | >> | > | > | I'm trying to add lines 1 - 5 to my overriden
>> OnRowDeleting
>> | >> method
>> | >> | > but
>> | >> | > | > can't
>> | >> | > | > | because the key accessed in base.Events is
>> EventRowDeleting,
>> | >> which
>> | >> | > is
>> | >> | > an
>> | >> | > | > | object that is a private constant that i dont have access
>> to
>> in
>> | >> my
>> | >> | > | > derived
>> | >> | > | > | control.
>> | >> | > | > |
>> | >> | > | > | How do I get a handle to any event handlers so I can call
>> | >> them???
>> | >> | > | > |
>> | >> | > | > | // this is the dissasembled method for GridView:
>> | >> | > | > | protected virtual void
>> OnRowDeleting(GridViewDeleteEventArgs
>> | >> e){
>> | >> | > | > bool
>> | >> | > | > | isBoundUsingDataSourceID = base.IsBoundUsingDataSourceID;1
>> | >> | > | > | GridViewDeleteEventHandler handler =
>> | >> (GridViewDeleteEventHandler)
>> | >> | > | > | base.Events[EventRowDeleting];2 if (handler != null)3
>> {4
>> | >> | > | > | handler(this, e);5 } else if
>> (!isBoundUsingDataSourceID
>> | >> &&
>> | >> | > | > !e.Cancel)
>> | >> | > | > | { throw new
>> | >> | > | > HttpException(SR.GetString("GridView_UnhandledEven t",
>> | >> | > | > | new object[] { this.ID, "RowDeleting" })); }}
>> | >> | > | > |
>> | >> | > | > |
>> | >> | > | > |
>> | >> | > | > |
>> | >> | > | > |
>> | >> | > | >
>> | >> | > |
>> | >> | > |
>> | >> | > |
>> | >> | >
>> | >> |
>> | >> |
>> | >> |
>> | >>
>> | >
>> | >
>> |
>> |
>> |
>>

>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Writing to a registered source in the Application event log with I =?Utf-8?B?SmVmZkRvdE5ldA==?= ASP .Net 6 08-01-2006 09:19 PM
Where is event to call Select Method registered in GridView Control? PeterKellner ASP .Net 0 07-13-2006 07:57 PM
How can I assign event handlers externaly? glevik@gmail.com Javascript 1 04-14-2005 11:20 PM
Can I use CSS to specify event handlers ? Richard A. DeVenezia Javascript 3 09-01-2003 09:54 PM
can you "inline" event handlers for objects in 1 script like in VBScript? Fred Javascript 1 07-18-2003 04:45 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57