在html设计窗口下可以简单如下实现:
<asp:Repeater id=Repeater1 runat="server">
<ItemTemplate>
<tr>
<td> <%# Container.DataItem %> </td>
</tr>
</ItemTemplate>
</>
可是我现在想在cs(codebehind)代码中设置ItemTemplate属性,改怎么办呀!我查MSDN也没有发现
多谢高手帮助!!!
by the way,我现在使用WebControl.Table对象来设置窗体,完全不用Asp.NEt中的html设计方式
<asp:Repeater id=Repeater1 runat="server">
<ItemTemplate>
<tr>
<td> <%# Container.DataItem %> </td>
</tr>
</ItemTemplate>
</>
可是我现在想在cs(codebehind)代码中设置ItemTemplate属性,改怎么办呀!我查MSDN也没有发现
多谢高手帮助!!!
by the way,我现在使用WebControl.Table对象来设置窗体,完全不用Asp.NEt中的html设计方式
解决方案 »
- 用代码 怎么写清空浏览器所有缓存?
- 俺写的编程辅助小工具->代码复制器,推荐一下
- 求助!!!!!!!!!!新手学习,问两个问题!!
- 今天做项目用到treeview控件发现了一个不知道是不是我的问题还是微软的BUG
- 求最好的.NET 的CMS系统 最好有源代码
- 如果您是初学asp.net,请进来看一下
- 问一简单问题!100分!来者有分啊!
- 超链接传送数据问题!!!!郁闷中————————救命呀!!!
- 我在ASP.NET中写了一个断点,为什么执行时一点反映也没有,在哪看断点处的值?
- 50分!!全局变量或函数的问题
- About ASP.NET
- “xsl”是未声明的命名空间。这个错误是怎么造成的啊,请看看我的代码,谢谢
<ItemTemplate>
<tr>
<td> <%#DataBinder.Eval(Container.DataItem,"字段名")%> </td>
</tr>
</ItemTemplate>
-------复杂一点说,如何在后台动态创建模板,从而设置Repeater中的ItemTemplate属性?
动态模版创建过程如下:
//动态创建自己的模板
public class MyItemTemplate:ITemplate
{
#region ITemplate 成员 public void InstantiateIn(Control container)
{
//模板中应保含的控件或别的元素
container.Controls.Add();
......
} #endregion }
创建完毕后,则可以Repeater.ItemTemplat=new MyItemTemplate()(我想可以这样)
假如我的理解正确,我现在就不知道怎么写InstantiateIn()中的代码,并且我的模板是和数据表中的字段绑定的(如上html所示)。
{
private string _colname;
/// <summary>
/// 绑定的列名
/// </summary>
public string ColumnName
{
get {return _colname;}
set {_colname = value;}
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ColumnName">绑定的列名</param>
public RepeaterItemTemplate(string ColumnName)
{
//
// TODO: 在此处添加构造函数逻辑
//
_colname = ColumnName;
}
#region ITemplate 成员 public void InstantiateIn(Control container)
{
// TODO: 添加 ucGridTemplateColumn.InstantiateIn 实现
//用Label控件来显示字段的文本
Label l = new Label();
l.DataBinding +=new EventHandler(l_DataBinding);
container.Controls.Add(l);
} #endregion //数据绑定
private void l_DataBinding(object sender, EventArgs e)
{
Label l = (Label)sender;
RepeaterItem container = (RepeaterItem) l.NamingContainer;
l.Text = ( (DataRowView) container.DataItem)[_colname].ToString();
}然后在你的放有Repeater控件的页面的CS文件中写:private void Page_Load(object sender, System.EventArgs e)
{
DataSet ds = data.GetDs(Sql);
//你自己的查询语句 BindRepeater(ds);
}//绑定
private void BindRepeater(DataSet ds)
{ //绑定你的列名
Repeater1.ItemTemplate = new RepeaterItemTemplate("str_TaskName"); Repeater1.DataSource = ds;
Repeater1.DataBind();}这样就显示了具体显示的格式啊,样式啊,颜色在自己控制
//绑定你的列名
Repeater1.ItemTemplate = new RepeaterItemTemplate("str_TaskName");
如果我想绑定好几个列,
是不是可以 Repeater1.ItemTemplate = new RepeaterItemTemplate("字段1","字段2",......);?
当然前提是在RepeaterItemTemplate类中增加了字段;你的测试没问题吧!
我也试试,高手啊!
<asp:repeater id="rp" runat="server">
<ItemTemplate>
<tr>
<td width="10%" align="center" bgcolor="#ffffff" height="24"> <%#DataBinder.Eval(Container.DataItem,"专家编号")%></td>
<td width="15%" align="center" bgcolor="#ffffff" height="24"> <%#DataBinder.Eval(Container.DataItem,"姓名")%></td>
<td width="20%" align =center >
<INPUT type="button" id=btnView OnClick=GotoMoreInfo(<%#DataBinder.Eval(Container.DataItem,"专家编号")%>) value="查看" />
<INPUT type="button" id=btnEdit OnClick=GotoEditInfo(<%#DataBinder.Eval(Container.DataItem,"专家编号")%>) value="修改" />
<INPUT type="button" id=bthDel OnClick="GotoDelInfo(<%#DataBinder.Eval(Container.DataItem,"专家编号")%>)" value="删除" />
</td>
</tr>
</ItemTemplate>
</Repeater>
该怎么办,特别是哪三个input button,谢谢了,高手!
//动态创建自己的模板
public class MyItemTemplate:ITemplate
{
private string _colname1;
private string _colname2;
private static string ReportCodValue;
//TemplateColumn tc=new
/// <summary>
/// 绑定的列名
/// </summary>
public string ReportCod
{
get {return _colname1;}
set {_colname1 = value;}
}
public string ReportName
{
get {return _colname2;}
set {_colname2 = value;}
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ColumnName">绑定的列名</param>
public MyItemTemplate(string ReportCod,string ReportName)
{
//
// TODO: 在此处添加构造函数逻辑
//
_colname1 = ReportCod;
_colname2 = ReportName; }
#region ITemplate 成员 public void InstantiateIn(Control container)
{
// TODO: 添加 ucGridTemplateColumn.InstantiateIn 实现
//用Label控件来显示字段的文本
Label ReportCod = new Label();
ReportCod.DataBinding +=new EventHandler(ReportCod_DataBinding);
container.Controls.Add(ReportCod);
Label ReportName = new Label();
ReportName.DataBinding +=new EventHandler(ReportName_DataBinding);
container.Controls.Add(ReportName); container.Controls.Add(new LiteralControl("<INPUT type=\"button\" id=btnEdit OnClick=\"GotoEdit("+ReportCodValue+")\" value=编辑 />"));
container.Controls.Add(new LiteralControl("<br>"));
} #endregion
//数据绑定
private void ReportCod_DataBinding(object sender, EventArgs e)
{
Label l = (Label)sender; RepeaterItem container = (RepeaterItem) l.NamingContainer;
l.Text = ( (DataRowView) container.DataItem)[_colname1].ToString();
ReportCodValue=l.Text ;
}
//数据绑定
private void ReportName_DataBinding(object sender, EventArgs e)
{
Label l = (Label)sender; RepeaterItem container = (RepeaterItem) l.NamingContainer;
l.Text = ( (DataRowView) container.DataItem)[_colname2].ToString();
}
}
因为这只是我整个代码的一部分,我的repeater实现翻页(每页3条记录)功能.目前出现的问题是:
1----模板的格式化,td问题,但换行已经解决,见代码所示;
2----“编辑”按钮触发的事件参数不正确,举例如下:
这三行(每页3行)的 ReportCod分别是 1,2,3;然而每行的“编辑”按钮事件参数分别是“3,2,1”,倒序;郁闷,你有什么办法吗?
真是郁闷;
对了,你有DataGrid动态生成模板的例子吗?其实我也觉得DataGrid可能更容易些,如果最终解决不了,就选择它了。都怪老板,非得用这种方法。
关于个是话还没有思路,希望以后多交流.1