为GridView添加模板列

public class GridViewTemplate : ITemplate
{
    
private string controlId = null;
    
private string dataField = null;
    
private Type type;

    
public GridViewTemplate(string controlId, Type type, string dataField)
    
{
        
this.controlId = controlId;
        
this.type = type;
        
this.dataField = dataField;
    }


    
public void InstantiateIn(System.Web.UI.Control container)
    
{
        
switch (type.FullName)
        
{
            
case ("System.Web.UI.WebControls.Label"):
                Label label 
= new Label();
                label.ID 
= controlId;
                label.DataBinding 
+= new EventHandler(control_DataBinding);
                container.Controls.Add(label);
                
break;
            
case ("System.Web.UI.WebControls.TextBox"):
                TextBox textBox 
= new TextBox();
                textBox.ID 
= controlId;
                textBox.DataBinding 
+= new EventHandler(control_DataBinding);
                container.Controls.Add(textBox);
                
break;
            
default:
                
break;
        }

    }

    
private void control_DataBinding(object sender, EventArgs e)
    
{
        GridViewRow container;
        
switch (type.FullName)
        
{
            
case ("System.Web.UI.WebControls.Label"):
                Label label 
= (Label)sender;
                container 
= (GridViewRow)label.NamingContainer;
                label.Text 
= ((DataRowView)container.DataItem)[dataField].ToString();
                
break;
            
case ("System.Web.UI.WebControls.TextBox"):
                TextBox textBox 
= (TextBox)sender;
                container 
= (GridViewRow)textBox.NamingContainer;
                textBox.Text 
= ((DataRowView)container.DataItem)[dataField].ToString();
                
break;
            
default:
                
break;
        }

    }

}
 
通过下面的代码调用上面的类
    protected void GenerateGridViewColumns()
    
{
        GridView gridView 
= testGridView;

        TemplateField templateField 
= new TemplateField();

        templateField.ShowHeader 
= true;

        templateField.HeaderText 
= "Id";

        templateField.ItemTemplate 
= new GridViewTemplate("idLabel"typeof(Label), "Id");

        gridView.Columns.Add(templateField);

        templateField 
= new TemplateField();

        templateField.ShowHeader 
= true;

        templateField.HeaderText 
= "Text";

        templateField.ItemTemplate 
= new GridViewTemplate("textTextBox"typeof(TextBox), "Text");

        gridView.Columns.Add(templateField);

        gridView.DataSource 
= CreateDataSource();

        gridView.DataBind();
    }

CreateDataSource返回的是一个DataView,

我试着给gridView的DataSource返回一个List泛型,比如List<GlTreeInfo>,但编译无法通过:
((DataRowView)container.DataItem)[dataField]中的DataItem是GlTreeInfo类,无法 type to DataRowView
posted @ 2009-06-23 12:39  马建康  阅读(329)  评论(0)    收藏  举报