ASP.NET中为DataGrid动态创建模板列

来源:互联网 发布:第三方软件测评 编辑:程序博客网 时间:2024/05/07 00:16
 

为DataGrid动态创建模板列,首先要实现ITemplate接口:

public class MyDataGridTemplate : System.Web.UI.ITemplate
{
    ListItemType _litType;
    
object _objData;
 
    
public MyDataGridTemplate(ListItemType litType, object objData)
    
{
        _litType 
= litType;
        _objData 
= objData;
    }


    
public void InstantiateIn(System.Web.UI.Control container)
    
{
        Literal ltr 
= new Literal();
        TextBox txt 
= new TextBox();
        
        
switch(_litType)
        
{
            
case ListItemType.Header:
                ltr.Text 
= "<b>" + _objData.ToString() + "</b>";
                container.Controls.Add(ltr);
                
break;
            
case ListItemType.Item:
                ltr.Text 
= _objData.ToString();
                container.Controls.Add(ltr);
                
break;
            
case ListItemType.EditItem:
                container.Controls.Add(txt);
                
break;
            
case ListItemType.Footer:
                ltr.Text 
= "<i>" + _objData.ToString() + "</i>";
                container.Controls.Add(ltr);
                
break;
        }

    }

}

现在就可以动态创建模板列了:

TemplateColumn tc;

tc 
= new TemplateColumn();
tc.HeaderText 
= "列1";
tc.ItemTemplate 
= new MyDataGridTemplate(ListItemType.Item, "列1");
dg.Columns.Add(tc);

tc 
= new TemplateColumn();
tc.HeaderText 
= "列2";
tc.ItemTemplate 
= new MyDataGridTemplate(ListItemType.Item, "列2");
dg.Columns.Add(tc);

以上代码的效果与下列代码相同:

<asp:TemplateColumn HeaderText="列1">
<ItemTemplate>
    
<asp:Literal Runat="server" Text="列1"></asp:Literal>
</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="列2">
<ItemTemplate>
    
<asp:Literal Runat="server" Text="列2"></asp:Literal>
</ItemTemplate>
</asp:TemplateColumn>
原创粉丝点击