在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设计方式

解决方案 »

  1.   

    参考一下 MSDN DataList.ItemCreated 事件ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemWebUIWebControlsDataListClassItemCreatedTopic.htm
      

  2.   

    没有什么启发呀?!continue waiting
      

  3.   

    -------简单的说,就是将在html设计环境下的以下代码如何在后台实现(当然事先new了一个Repeater实例)
     <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所示)。
      

  4.   

    我刚写的,正好我也在思考这个问题: public class RepeaterItemTemplate :ITemplate
    {
    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();}这样就显示了具体显示的格式啊,样式啊,颜色在自己控制
      

  5.   

    终于找到志同道合的哥们了,
      //绑定你的列名
    Repeater1.ItemTemplate = new RepeaterItemTemplate("str_TaskName");
    如果我想绑定好几个列,
    是不是可以  Repeater1.ItemTemplate = new RepeaterItemTemplate("字段1","字段2",......);?
    当然前提是在RepeaterItemTemplate类中增加了字段;你的测试没问题吧!
    我也试试,高手啊!
      

  6.   

    我试了,还行,能显示出来,可我想用后台实现下面的html代码功能
    <asp:repeater id="rp" runat="server">
    <ItemTemplate>
            <tr>
    <td width="10%" align="center" bgcolor="#ffffff" height="24">&nbsp;<%#DataBinder.Eval(Container.DataItem,"专家编号")%></td>
    <td width="15%" align="center" bgcolor="#ffffff" height="24">&nbsp;<%#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,谢谢了,高手!
      

  7.   

    如果想绑定多个列,你可以更改RepeaterItemTemplate类的构造函数,让它支持多个列就行了,你还需要用多个Label吧。不过我没有找到格式化RepeaterItemTemplate类的方法,我上面的程序能正常的显示记录,但是都记录值都连在一起了,因为没有<td>,我还不知道怎么解决!你有什么好方法?
      

  8.   

    你既然想实现修改、删除功能,为什么不用DATAGRID呢?我个人感觉DATAGRID有时比REPEATER好用,比如说你要的这种功能!你如果想在REPEATER中实现链接列的功能,那就在把上面那个类改改,让它支持LINKBUTTON,并且让LinkButton的CommandName="View",然后你在Repeater的ItemCommand中用e.commandname来获取"View",然后执行操作即可。
      

  9.   

    你说的第一个问题,我也很郁闷,想半天 格式化我也不知道,这是我写得绑定多列,并且嵌入客户端按钮的代码:
    //动态创建自己的模板
    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可能更容易些,如果最终解决不了,就选择它了。都怪老板,非得用这种方法。
        
      

  10.   

    改用datagrid的了,谢谢大家关注,更感谢 codehunter008(马里奥)的帮助,20分都是你的了.
    关于个是话还没有思路,希望以后多交流.1