自定义模板化数据绑定控件从webcontrol和Control有什么不同?

vme 2004-09-16 09:47:29
自定义功能类似与Repeater的模板化数据绑定控件(包括控件的 Designer)。控件从webcontrol继承过来的话,什么问题都没有。但如果从control继承过来,没办法获得设计时期的界面,GetDesignTimeHtml返回的是空内容。由于控件没有定义任何样式(类似于Pepeater),代码没有重写过任何与呈现有关的函数。请问是怎么回事,问题怎么解决。
...全文
151 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
vme 2004-09-20
  • 打赏
  • 举报
回复
问题已解决。
控件要多个属性 PersistChildren(false),不然ItemTemplate为NULL ,子控件加不进去。
好象Control默认PersistChildren为true,而WebControl默认PersistChildren为false;
vme 2004-09-20
  • 打赏
  • 举报
回复
up
vme 2004-09-19
  • 打赏
  • 举报
回复
是这样的,这时控件是Control派生的。
但如果控件WebControl派生。
designTimeHTML = base.GetDesignTimeHtml();
System.Windows.Forms.MessageBox.Show(designTimeHTML);
得到就是预期的内容。
saucer 2004-09-19
  • 打赏
  • 举报
回复
you mean

this shows 5:

System.Windows.Forms.MessageBox.Show(tl.Items.Count.ToString());

but this is empty?

designTimeHTML = base.GetDesignTimeHtml();
System.Windows.Forms.MessageBox.Show(designTimeHTML);



vme 2004-09-19
  • 打赏
  • 举报
回复
这种方式我有测试过,得到的结果是和预期的一样为5。designTimeDataSource里面也有数据。但调用designTimeHTML = base.GetDesignTimeHtml的结果还是为空。不知道问题出在设计器还是控件的代码,因为我控件如果从WebControl派生,就可以得到正确的DesignTimeHtml内容,而从Control派生得到DesignTimeHtml的内容为空。
saucer 2004-09-19
  • 打赏
  • 举报
回复
>>>>现在的问题是,控件从Control派生时设计界面始终都是空空的,不管是否模板是否有内容,就只调用GetEmptyDesignTimeHtml的内容

something is probably wrong with your designer

the following works for me:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Web.UI.Design;

namespace SimpleControls
{
public class SimpleDesigner : System.Web.UI.Design.ControlDesigner
{
public override string GetDesignTimeHtml()
{
return "design time";
}

protected override string GetEmptyDesignTimeHtml()
{
return "empty";
//return base.GetEmptyDesignTimeHtml ();
}
}

[DefaultProperty("Text"),
ToolboxData("<{0}:TestSimple runat=server></{0}:TestSimple>"),
Designer(typeof(SimpleDesigner))
]
public class TestSimple : System.Web.UI.Control //System.Web.UI.WebControls.WebControl
{
private string text;

[Bindable(true),Category("Appearance"),DefaultValue("")]
public string Text
{
get {return text;}
set {text = value;}
}
protected override void Render(HtmlTextWriter output)
{
output.Write(Text);
}
}
}



try to see if you have anything...


public override string GetDesignTimeHtml()
{
TidyList tl = (TidyList)Component;
string designTimeHTML = null;

IEnumerable designTimeDataSource = GetDesignTimeDataSource(5);
try
{
tl.DataSource = designTimeDataSource;
tl.DataBind();
System.Windows.Forms.MessageBox.Show(tl.Items.Count.ToString());

designTimeHTML = base.GetDesignTimeHtml();
}
catch (Exception e)
{
designTimeHTML = GetErrorDesignTimeHtml(e);
}
finally
{
tl.DataSource = null;
}
return designTimeHTML;
}
vme 2004-09-18
  • 打赏
  • 举报
回复
控件的源代码在:
http://www.cnco.cn/vtest/tidylist/index.htm

希望能发现错在那里。
vme 2004-09-18
  • 打赏
  • 举报
回复
首先我做的是个模板化数据绑定控件,功能有点类似Repeater控件,该控件无论从webcontrol或从control派生在运行时都不会出现问题。我现在想得到设计时期的界面呈现支持,但不想对其在设计界面时进行模板编辑(类似Repeater只能在HTML视图下编辑),因此设计器是从ControlDesigner派生过来的,而不是从TemplatedControlDesigner派生。又由于控件不需要任何的样式,因此控件从Control派生(这点类似于Repeater也是从Control派生,而DataList是从WebControl派生)。

现在的问题是,控件从Control派生时设计界面始终都是空空的,不管是否模板是否有内容,就只调用GetEmptyDesignTimeHtml的内容。但如果我把控件从WebControl派生,就可以得到类似与Repeater在设计时期的界面。我怀疑是否从Control派生要重写Render方法,当查看了下Repeater控件,也没有重写该方法,同时Repeater控件的设计器RepeaterDesigner也是从ControlDesigner继承的。
Lostinet 2004-09-18
  • 打赏
  • 举报
回复
从WebControl中得到的是更多的支持。
例如Attributes,Style,ControlStyle,Tag,Render时的支持等。

如果你继承Control,那当然很多事情要自己做。
guxiangdefeng 2004-09-18
  • 打赏
  • 举报
回复
不太明白你的意思,
你想显示什么效果.
vme 2004-09-18
  • 打赏
  • 举报
回复
怎么没人能解决啊?
vme 2004-09-18
  • 打赏
  • 举报
回复
怎么没人来帮忙啊?
viena 2004-09-16
  • 打赏
  • 举报
回复
up
vme 2004-09-16
  • 打赏
  • 举报
回复
从control继承,在运行期也不会出问题。
vme 2004-09-16
  • 打赏
  • 举报
回复
谁帮忙下,谢了

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧