gridview中的单元格失去对RowUpdating事件的控制

时间:2010-01-06 10:11:02

标签: c# .net asp.net gridview controls

我对ASP.NET的C#组合很新,所以我会尝试尽可能清楚地解释。

我正在使用GridView来显示驻留在数据库中的一些列和行。这很好用。因为我想从名称列表中动态添加列。假设我们有一个包含5个名字的列表,然后它为GridView中的每个名称动态创建一个列。 这是一些代码来显示我的工作:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //Create columns for each student
        List<Student> allStudents = new Eetlijst.Business.Students().GetAll();
        allStudents.Reverse();

        foreach (Student student in allStudents)
        {
            StudentBoundField studentField = new StudentBoundField();
            studentField.HeaderText = student.Naam;
            MaaltijdGrid.Columns.Insert(4, studentField);
        }

        ShowDataInGrid(DateTime.Now.Month, DateTime.Now.Year);

其他一些东西并不重要。 ShowDataInGrid看起来如下:

public void ShowDataInGrid(int maand, int jaar)
{
    List<Maaltijd> allMaaltijden = new Eetlijst.Business.Maaltijden().GetByMonthAndYear(maand, jaar);
    Session.Contents.Add("maaltijden", allMaaltijden);

    MaaltijdGrid.DataSource = allMaaltijden;
    MaaltijdGrid.DataBind();
}

如何为每行创建动态列? 我用DataBound事件创建它们。因此,当GridView数据绑定时,列将填充数据。内部还有一个检查,以查看该行是否处于编辑模式。因此,当我单击行旁边的编辑按钮时,该行将完全处于编辑模式。我做的代码将一个TextBox控件添加到单元格。 当我填写一个值并按下更新按钮时,它再也找不到任何控件,因此我无法获得我输入的值。当我在它之后放置一个断点时,DataBound中的控件仍然存在。但是当我单击“更新”按钮时,单元格的所有控件都消失了。

我在网上搜索过,我发现它与应用程序在到达RowUpdating方法之前触发回发有关。

那么,我如何让控件存在,当它处于编辑模式时我添加到单元格?

如果有人需要DataBound事件中的代码,我会发布它。

2 个答案:

答案 0 :(得分:1)

由于控件的工作方式,需要在每次页面加载时重新创建动态控件或列。动态控件不会被保留,因此您必须在每个页面回发时重新加载它们;但是,将保留viewstate用于这些控件。

HTH。

答案 1 :(得分:0)

调用此函数ShowDataInGrid(DateTime.Now.Month,DateTime.Now.Year);在你的

Page_Init事件。

您将获得控制权以及价值。