关于GridView中动态生成模板列的问题

 

 

         这两天翻出来前几天做的一个项目进行修改,其中有一点是要做到在GridView中动态生成列(模板列),以便于输入信息。

         自己做的一个简单的Demo是这样的

         页面部分: 

public partial class _Default : System.Web.UI.Page 

{

    Hashtable _ht 
= new Hashtable();

 

    
protected void Page_Load(object sender, EventArgs e)

    
{

        
if (!IsPostBack)

        
{

            TemplateField customField 
= new TemplateField();

            customField.ShowHeader 
= true;

            customField.HeaderText 
= "我是谁";

            customField.ItemTemplate 
= new TemplateDemo(DataControlRowType.DataRow);

            GridView1.Columns.Add(customField);

        }


    }


    
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    
{

        
if(e.Row.RowType==DataControlRowType.DataRow)

        
{

            TextBox tx
=(TextBox)e.Row.FindControl("txtWho");

            tx.Text 
= "456";

        }


    }


    
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)

    
{

        TextBox tc 
= (TextBox)GridView1.Rows[GridView1.SelectedIndex].FindControl("txtWho");

        
string name = tc.Text;

    }


    
protected void Button1_Click(object sender, EventArgs e)

    
{

        
int i = 1;

        
foreach (GridViewRow gvr in GridView1.Rows)

        
{

            TextBox tc
=gvr.FindControl("txtWho"as TextBox;

            _ht.Add(i,tc.Text);

            i
++;

        }


    }


}


         自己重写的一个接口类如下: 

public class TemplateDemo:ITemplate

{

    
private DataControlRowType _templateType;

 

    
public TemplateDemo(DataControlRowType temp)

    
{

        _templateType 
= temp;

    }


 

    
ITemplate 成员

}


 

   这样写好之后就发现了一个问题:虽然模板列可以动态生成,而且可以在RowDataBind事件中赋值,但是如果执行Gridview的选中事件或者编辑事件,则会找不到这个模板列,苦

思不得其解。

    后来想,这可能是和视图状态有关系,由于动态添加的模板列并没有加到视图状态之中,所以无法保存下来,导致执行相应事件后,模板列实际消失,当然也就得不到他了。

    那么有什么方法解决呢?后来想,是否可以自己写一个类似于视图状态的类,当生成要求的GridView后,立即将其保存下来,然后在执行GridView的相应事件时,在将其赋值回去,但是感觉这样很难实现,不知道园子里的前辈们有什么高招没有?

posted on 2007-08-09 13:52  Square  阅读(2655)  评论(6编辑  收藏  举报