Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Привет, всем. Друзья! пишу WebControl который содержит DataGrid, дабы пользователь мог настраивать столбцы оперделяю такое вот свойство: [DefaultValueAttribute(null)] [EditorAttribute(typeof(System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] [MergableProperty (false)] [PersistenceMode (PersistenceMode.InnerProperty)] public virtual DataGridColumnCollection Columns { get { return dg.Columns; //dg — это собственно DataGrid } } Выклыдываю контрол на WebPagе, смотрю его свойства, кликаю мышкой на Columns — выдаёт Specified Cust is not valid. мож кто шо подскажет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 18:28 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Где сам грид создается, надеюсь в CreateChildControls()? Тогда public virtual DataGridColumnCollection Columns { get { EnsureChildControls(); return dg.Columns; //dg — это собственно DataGrid } } Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 20:14 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Dimon aka Manowar, Вы писали: DAM>Где сам грид создается, надеюсь в CreateChildControls()? Собственно вот сам контрол: [DefaultProperty("DataSource"), ToolboxData("<{0}:GridEx runat=server></{0}:GridEx>"), Designer(typeof(WCL.Design.GridExDesigner))] public class GridEx : WebControl, INamingContainer { private string _dataMember=null; private object _dataSource=null; private DataGrid dg = new DataGrid(); private Button btnAdd = new Button(); private Button btnEdit = new Button(); private Button btnDelete = new Button(); private Button btnFilter = new Button(); private Table tbl = new Table(); private TableRow row0 = new TableRow(); private TableRow row1 = new TableRow(); private TableCell cell11 = new TableCell(); private TableCell cell12 = new TableCell(); private TableCell cell13 = new TableCell(); private TableCell cell21 = new TableCell(); private ArrayList columns_list; private DataGridColumnCollection columns; public GridEx() { btnAdd.Height = btnEdit.Height = btnDelete.Height = btnFilter.Height = Unit.Parse("20px"); System.Drawing.ColorConverter cc = new ColorConverter(); /////////////////////////// Инициализируем DataGrid (настройки по умолчанию)//////////// dg.AllowPaging = true; dg.PagerStyle.Mode = System.Web.UI.WebControls.PagerMode.NumericPages; dg.PagerStyle.Font.Size = FontUnit.Parse("7pt"); dg.HeaderStyle.BackColor = System.Drawing.SystemColors.Highlight; dg.HeaderStyle.ForeColor = System.Drawing.SystemColors.InactiveCaption; dg.PagerStyle.BackColor = System.Drawing.SystemColors.Highlight; dg.PagerStyle.ForeColor = (Color)cc.ConvertFromString("Yellow"); dg.PageSize = 21; dg.CurrentPageIndex =0; dg.AllowSorting = true; dg.GridLines = GridLines.None; cell21.Width = Unit.Parse("100%"); tbl.Width = Unit.Parse("100%"); } public DataGrid GetDataGrid() { return dg; } public void DesingTimeDraw() { this.EnsureChildControls(); } protected override void OnInit(EventArgs e) { InitializeControls(); base.OnInit (e); } private void InitializeControls() { btnAdd.Click += new System.EventHandler(Add_Click); btnEdit.Click += new System.EventHandler(Edit_Click); btnDelete.Click += new System.EventHandler(Delete_Click); dg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(DataGrid_PageIndexChanged); } private void DataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { dg.CurrentPageIndex = e.NewPageIndex; dg.DataBind(); } private void Add_Click(object sender, System.EventArgs e) { } private void Edit_Click(object sender, System.EventArgs e) { } private void Delete_Click(object sender, System.EventArgs e) { } protected override void CreateChildControls() { Controls.Add(tbl); btnAdd.Text = "Добавить"; btnEdit.Text = "Редактировать"; btnDelete.Text = "Удалить"; btnFilter.Text = "Фильтр"; cell11.Controls.Add(btnAdd); cell11.Controls.Add(btnEdit); cell11.Controls.Add(btnDelete); cell11.Controls.Add(btnFilter); cell21.Controls.Add(dg); row0.Cells.Add(cell11); row0.Cells.Add(cell12); row0.Cells.Add(cell13); row1.Cells.Add(cell21); cell21.ColumnSpan = 3; tbl.Rows.Add(row0); tbl.Rows.Add(row1); } public override void DataBind() { dg.DataBind(); base.DataBind (); } [DefaultValueAttribute(null)] [EditorAttribute(typeof(System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))] [MergableProperty (false)] [PersistenceMode (PersistenceMode.InnerProperty)] public virtual DataGridColumnCollection Columns { get return dg.Columns; } } [Bindable(true), Category("Data"), DefaultValue(null), Description("The datasource that is used to populate the list with items."), // needs to be hidden otherwise we don't save the property for some reason DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden) ] public object DataSource { get { return _dataSource; } set { if ((value == null) || (value is IListSource) || (value is IEnumerable)) { _dataSource = value; if (_dataSource!=null) { dg.DataSource = this._dataSource; dg.DataBind(); } } else throw new Exception("Invalid datasource."); } } /// <summary> /// The table used for binding when a DataSet is used as the DataSource. /// </summary> [ Bindable(false), Category("Data"), DefaultValue(""), Description("The table used for binding when a DataSet is used as the DataSource.") ] public string DataMember { get { return _dataMember; } set { _dataMember = value; } } /// <summary> /// Render this control to the output parameter specified. /// </summary> /// <param name="output"> The HTML writer to write out to </param> protected override void Render(HtmlTextWriter output) { tbl.RenderControl(output); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:27 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Некоторые малозначащие свойства (ItemsStyle, HeaderStyle и тд и тп) я убрал, дабы уменьшить размер поста, и в свойстве Columns забыл скобочку { — ну а в остальном всё так как в жизни. прописка EnsureChildControls перед return dg.Columns; , ничего не дала, ошибка таже, Cast is not valid. Поможите!!!! С уважением, Potandr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:34 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 13:25 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
1. INamingContainer не нужен. 2. Все создание контролов переносишь в CreateChildControls(), все созданные контролы добавляешь в коллекцию Controls. 3. Пишешь public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } 4. DataBind() и Render() не нужно переопределять. 5. Все обращения к внутренним контролам делай через Controls. Вроде все. Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 13:31 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
P>Выклыдываю контрол на WebPagе, смотрю его свойства, кликаю мышкой на Columns — выдаёт Specified Cust is not valid. P>мож кто шо подскажет Дело не в твоем контроле, а в дизайнере который ты пытаешься использовать P>[EditorAttribute(typeof( System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor ), typeof(System.Drawing.Design.UITypeEditor))] если глянуть на него рефлектором public class DataGridColumnCollectionEditor : UITypeEditor { public DataGridColumnCollectionEditor(){} public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { IDesignerHost host1 = (IDesignerHost) context.GetService(typeof(IDesignerHost)); DataGrid grid1 = (DataGrid) context.Instance; ((BaseDataListDesigner) host1.GetDesigner(grid1)).InvokePropertyBuilder(DataGridComponentEditor.IDX_COLUMNS); return value; } public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } } в выделеной строчке, контекстом является ТВОЙ контрол который содержит нрид но не может быть к нему приведен, поэтому и падает. более того следующий код ( InvokePropertyBuilder ) тоже привязан к тому что вызвающий код грид. попозже попробую переделать этот дизайнер — если получится, напишу.... << RSDN@Home 1.1.4 stable SR1 rev. 568>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 14:29 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, mogadanez, Вы писали: M>попозже попробую переделать этот дизайнер — если получится, напишу. Думаю полностью это сделать нереально. вот пример частично работающего кода public class CustomDataGridColumnCollectionEditor : UITypeEditor { public CustomDataGridColumnCollectionEditor(){} public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { DataGrid grd = ( (GridEx) context.Instance ).GetDataGrid(); BaseDataListDesigner designer = new System.Web.UI.Design.WebControls.DataGridDesigner(); designer.Initialize( grd ); untyped_object.call_method( designer, "InvokePropertyBuilder", 1 ); return value; } public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } } по крайней мере дизайнер открывается — но с ошибкой, копаться в потрохах не охота, да и тебе не советую. ибо идея твоя в принципе порочна... Сам подумай куда дизайнер сохранит выбранные тобой колонки? на странице нет описания грида — только твоего контрола. есть другое предложение — почему не сделать твой контрол наследным от грида?... << RSDN@Home 1.1.4 stable SR1 rev. 568>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 15:32 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, mogadanez, Вы писали: M>Думаю полностью это сделать нереально. Хм, поборим, где наша не пропадала — наша пропадала везде. :) М>Сам подумай куда дизайнер сохранит выбранные тобой колонки? M>на странице нет описания грида — только твоего контрола. Думаю, что нужно ещё и Designer писать , и ставить флажки сериализации соответствующие, во всяком случае DataSource так прикручен. M>есть другое предложение — почему не сделать твой контрол наследным от грида? слишком просто , для того кто пишет контрол, и слишком сложно для того кто будет на кучу формочек раз за разом ложить одни и теже группы контролов, в разных приложениях, согласись. Ну и потом надож круть показать ;)))) И вопрос ещё, этот вызов и какого Framework-a? я пишу для первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 17:29 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Potandr, Вы писали: P>И вопрос ещё, этот вызов и какого Framework-a? я пишу для первого. имелся ввиду вот этот untyped_object.call_method ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 17:31 |
|
||
|
DataGridColumnCollection - в Custom WebControl
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Potandr, Вы писали: P>Здравствуйте, Potandr, Вы писали: P>>И вопрос ещё, этот вызов и какого Framework-a? я пишу для первого. P>имелся ввиду вот этот untyped_object.call_method FW 1.1 это ReflectionHelper а тут его обновляемая версия.... << RSDN@Home 1.1.4 stable SR1 rev. 568>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34018493&tid=1389149]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 349ms |

| 0 / 0 |
