我对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事件中的代码,我会发布它。
答案 0 :(得分:1)
由于控件的工作方式,需要在每次页面加载时重新创建动态控件或列。动态控件不会被保留,因此您必须在每个页面回发时重新加载它们;但是,将保留viewstate用于这些控件。
HTH。
答案 1 :(得分:0)
调用此函数ShowDataInGrid(DateTime.Now.Month,DateTime.Now.Year);在你的
Page_Init事件。
您将获得控制权以及价值。