to 思归

zhongkeruanjian 2003-08-25 11:58:04
昨天那个自定义的派生于DATALIST的可分页的SUNDATALIST的问题
你建议我看的例子,我已经看了,谢谢!,
今天重载了RENDER,
如下:
override protected void Render(HtmlTextWriter writer)
{

RenderContents(writer);
btnPrev.RenderControl(writer);

btnMore.RenderControl(writer);

}
我在重载的 CreateControlHierarchy 方法里
添加了两个按钮控件
如下:
override protected void CreateControlHierarchy(bool useDataSource)
{
base.CreateControlHierarchy(useDataSource);
btnPrev = new ImageButton();

btnPrev.Click += new ImageClickEventHandler(PreviousClicked);
Controls.Add(btnPrev);

btnMore = new ImageButton();

btnMore.Click += new ImageClickEventHandler(MoreClicked);
Controls.Add(btnMore);
}

问题解决!
但是我想不通,为什么在CreateControlHierarchy 方法里添加的两个按钮控件
在DATALIST.RENDER()里会出现类型转换无效这个问题呢?
我重载的RENDER里我自己为什么还要手工RENDER按钮呢?
请指教!
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjcking 2003-08-25
  • 打赏
  • 举报
回复
up
saucer 2003-08-25
  • 打赏
  • 举报
回复
I forgot the details, but if you have used
Controls.Add(btnPrev);

then you shouldn't need to do
btnPrev.RenderControl(writer);

that is, you don't need to override Render at all
saucer 2003-08-25
  • 打赏
  • 举报
回复
try the following:

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

namespace CSDNControls
{
/// <summary>
/// Summary description for MyDataList.
/// </summary>
[ToolboxData("<{0}:MyDataList runat=server></{0}:MyDataList>")]
public class MyDataList : System.Web.UI.WebControls.DataList
{
Button btnPrev, btnNext;
protected override void CreateControlHierarchy(bool useDataSource)
{
base.CreateControlHierarchy(useDataSource);

DataListItem dli = new DataListItem(0, ListItemType.Item);

btnPrev = new Button();
btnPrev.Text = "Previous";
btnPrev.Click += new EventHandler(Button_Clicked);
dli.Controls.Add(btnPrev);

btnNext = new Button();
btnNext.Text = "Next";
btnNext.Click += new EventHandler(Button_Clicked);
dli.Controls.Add(btnNext);

Controls.Add(dli);
}

private void Button_Clicked(Object sender, EventArgs e)
{
Button btn = (Button)sender;
Page.Response.Write(btn.Text + " is clicked");
}

protected override void Render (HtmlTextWriter writer)
{
base.Render(writer);
//you still have to call the following, since the base.Render will not render them
btnPrev.RenderControl(writer);
btnNext.RenderControl(writer);
}
}
}
saucer 2003-08-25
  • 打赏
  • 举报
回复
I was wrong, inside DataList.Render method, it does some preparation (like applying styles) on the controls, i.e., Items, it probably tries to cast your buttons to DataListItem, but failed

it was ok in the above code of yours because you called
RenderContents(writer);

and bypassed the other methods

62,041

社区成员

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

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

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

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