Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ASP.NET Custom GridView в нейсвой DataControlField, не отлавливается event RowCommand 
:(
    Опции темы
pawlenty
Дата 13.7.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Добрый день. У меня стала задача - создать кастом контрол с возможностью генерировать разное кол-во гридвьювов. На вход которого я буду передовать Dictionary<string, HostLog[]>, где HostLog - массив некоторого класса, по которому будет идти биндинг каждой из гридвью

Вот код моего DataControlField (в нем я тоже пытался отловить нажатие по linkButton: ф-ция linkButton_Click)

Код

public class LinkTemplateField : DataControlField
    {
        public const string CommandName = "Redirect";
        
        public string LinkText
        {
            get
            {
                object value = base.ViewState["LinkText"];
                if (value != null)
                {
                    return value.ToString();
                }
                else
                {
                    return "";
                }
            }
            set
            {
                base.ViewState["LinkText"] = value;
                this.OnFieldChanged();
            }
        }


        public string LinkCommandArgument
        {
            get
            {
                object value = base.ViewState["LinkCommandArgument"];
                if (value != null)
                {
                    return value.ToString();
                }
                else
                {
                    return "";
                }
            }
            set
            {
                base.ViewState["LinkCommandArgument"] = value;
                this.OnFieldChanged();
            }
        }

        protected override DataControlField CreateField()
        {
            return new BoundField();
        }

        public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
        {

            //Call the base method.
            base.InitializeCell(cell, cellType, rowState, rowIndex);

            switch (cellType)
            {
                case DataControlCellType.DataCell:
                    this.InitializeDataCell(cell, rowState);
                    break;

                /*case DataControlCellType.Footer:
                    this.InitializeFooterCell(cell, rowState);
                    break;*/

                case DataControlCellType.Header:
                    this.InitializeHeaderCell(cell, rowState);
                    break;
            }
        }

        protected void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
            
            string ID = Guid.NewGuid().ToString();
            LinkButton linkButton = new LinkButton();
            linkButton.ID = ID;
            linkButton.Click += new EventHandler(linkButton_Click);

            linkButton.DataBinding += new EventHandler(linkButton_DataBinding);
            cell.Controls.Add(linkButton);            
        }

        void linkButton_Click(object sender, EventArgs e)
        {

            object sender1 = sender;
            //throw new Exception("The method or operation is not implemented.");
        }

        protected void InitializeHeaderCell(DataControlFieldCell cell, DataControlRowState rowState)
        {
            Label lbl = new Label();
            lbl.Text = "<b>File Name</b>";
            cell.Controls.Add(lbl);
        }

        protected void linkButton_DataBinding(object sender, EventArgs e)
        {
            // get a reference to the control that raised the event
            LinkButton linkButton = (LinkButton)sender;
            Control container = (GridViewRow)linkButton.NamingContainer;
            linkButton.Click += new EventHandler(linkButton_Click);
            // get a reference to the row object
            object dataItem = DataBinder.GetDataItem(container);

            // get the row's value for the named data field only use Eval when it is neccessary
            // to access child object values, otherwise use GetPropertyValue. GetPropertyValue
            // is faster because it does not use reflection
            object dataFieldValueLinkText = null;
            object dataFieldValueLinkCommandArgument = null;
            
            dataFieldValueLinkText = this.LinkText.Contains(".") ? DataBinder.Eval(dataItem, this.LinkText) : DataBinder.GetPropertyValue(dataItem, this.LinkText);
            dataFieldValueLinkCommandArgument = this.LinkText.Contains(".") ? DataBinder.Eval(dataItem, this.LinkCommandArgument) : DataBinder.GetPropertyValue(dataItem, this.LinkCommandArgument);

            linkButton.CommandName = CommandName;
            
            if (dataFieldValueLinkText != null)
            {
                linkButton.Text = dataFieldValueLinkText.ToString();
            }

            if (dataFieldValueLinkCommandArgument != null)
            {
                linkButton.CommandArgument = dataFieldValueLinkCommandArgument.ToString();
            }
        }        
    }



Вот код моего кастом контролла
Код

public class SystemLogsControl : WebControl
    {       
        private static readonly ILog log = LogManager.GetLogger(typeof(AdvancedGridView).Name); //obtaining logger       

        public Dictionary<string, HostLog[]> LogsFromAgentHostMachines
        {
            get
            {
                return ViewState["LogsFromAgentHostMachines"] as Dictionary<string, HostLog[]>;
            }
            set
            {
                ViewState["LogsFromAgentHostMachines"] = value;
            }
        }

        public HttpResponse Response;        

        public string LinkText
        {
            get
            {
                object o = ViewState["LinkText"];
                return ((o == null) ? string.Empty : (string)o);
            }
            set
            {
                ViewState["LinkText"] = value;
            }
        }

        public string LinkCommandArgument
        {
            get
            {
                object o = ViewState["LinkCommandArgument"];
                return ((o == null) ? string.Empty : (string)o);
            }
            set
            {
                ViewState["LinkCommandArgument"] = value;
            }
        }

        private void CreateAdvancedGridViews(Dictionary<string, HostLog[]> agentHostLogs)
        {
            if (agentHostLogs != null && agentHostLogs.Count > 0)
            {                
                Table table;
                TableRow tableRow;
                TableCell tableCell;                
                LinkTemplateField linkTemplateField;
                BoundField boundField;
                GridView advancedGridView;
                
                Controls.Clear();
                LinkText = HostLog.bindingField_FileName;
                LinkCommandArgument = HostLog.bindingField_FileName;

                foreach (KeyValuePair<string, HostLog[]> log in agentHostLogs)
                {                    
                    table = new Table();
                    table.CellSpacing = 2;
                    table.CellPadding = 2;
                    table.BorderWidth = new Unit("0");                    
                    table.Width = new Unit("100%");
                    
                        tableRow = new TableRow();
                        tableCell = new TableCell();
                        tableCell.Height = new Unit("25px");
                        tableCell.CssClass = "headerBg2";
                        tableCell.ColumnSpan = 2;
                        tableCell.Text = string.Format("<b>Agent Host ({0}) Log Files</b>", log.Key);
                        tableRow.Cells.Add(tableCell);
                        table.Rows.Add(tableRow);

                        tableRow = new TableRow();
                        tableCell = new TableCell();
                        tableRow.VerticalAlign = VerticalAlign.Top;
                        tableCell.Width = new Unit("100%");

                            advancedGridView = new GridView(); 
                            advancedGridView.ID = log.Key;
                            advancedGridView.AutoGenerateColumns = false;
                            advancedGridView.SkinID = "AdvancedDataGrid";
                            advancedGridView.Width = new Unit("95%");
                            advancedGridView.Init += new EventHandler(advancedGridView_Init);
                            advancedGridView.Load += new EventHandler(advancedGridView_Load);
                            advancedGridView.RowCommand += new GridViewCommandEventHandler(advancedGridView_RowCommand);                                    
                            advancedGridView.HeaderStyle.CssClass = "gridHeader";
                            advancedGridView.CssClass = "grid";
                            advancedGridView.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                            advancedGridView.HeaderStyle.Height = new Unit("18px");
                            advancedGridView.RowStyle.Height = new Unit("18px");
                            
                            linkTemplateField = new LinkTemplateField();
                            linkTemplateField.LinkText = LinkText;
                            linkTemplateField.LinkCommandArgument = LinkCommandArgument;

                            advancedGridView.Columns.Add(linkTemplateField);                                
                            
                            boundField = new BoundField();
                            boundField.DataField = HostLog.bindingField_LastModified;
                            boundField.HeaderText = "<b>Last Modified</b>";
                            boundField.HtmlEncode = false;
                            advancedGridView.Columns.Add(boundField);

                        tableCell.Controls.Add(advancedGridView);
                        tableRow.Cells.Add(tableCell);
                        table.Rows.Add(tableRow);

                        Controls.Add(table);

                    advancedGridView.DataSource = log.Value;
                    advancedGridView.DataBind();               
                }
            }
        }

        void advancedGridView_Init(object sender, EventArgs e)
        {
            //этот эвен возникает           
            //throw new Exception("The method or operation is not implemented.");
        }

        void advancedGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //этот эвен НЕ возникает
            //throw new Exception("The method or operation is not implemented.");
        }

        void advancedGridView_Load(object sender, EventArgs e)
        {
            //этот эвен возникает
            //throw new Exception("The method or operation is not implemented.");
        }     

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ASP | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.