我有一个ASP.NET GridView,它使用模板列和用户控件来允许我动态构建数据网格。现在我正在实现用于插入行的事件处理程序。为此,我创建了一个默认值数组,并将其添加到充当数据源的数据表中。但是,当在回发时触发我的OnLoad事件时,我的所有模板列都不再具有用户控件。我的gridview最终只是空白,没有任何内容,我的按钮列也消失了(包含添加行,删除行和保存按钮)。
我的行添加事件只是这样做:
public void AddDataGridRow()
{
List<object> defRow = new List<object>();
for (int i = 0; i < fieldNames.Count; i++)
{
defRow.Add(GetDefaultValueFromDBType(types[i]));
}
dt.Rows.Add(defRow);
}
它是从用户控件中的按钮触发的,其实现如下:
protected void Button1_Click(object sender, EventArgs e)
{
((Scoresheet)(this.Page)).AddDataGridRow();
}
我的on load事件在第一次运行时做了很多东西来设置GridView,但是我没有通过使用IsPostBack属性来再次运行它。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
Initialize();
}
任何人都有任何关于我的用户控件消失的提示吗?
答案 0 :(得分:3)
你必须在每个page_load上将控件添加到网格中,而不仅仅是(!Postback)
答案 1 :(得分:0)
你在usercontrols和GridView上有EnableViewState = true吗?
答案 2 :(得分:0)
Initialize()调用AddDataGridRow()方法吗?你基本上有两个选择:
从您的代码中,不清楚用户控件是否保持viewstate及其中包含的内容。甚至不清楚你所显示的方法的执行顺序是什么。没有绑定逻辑,因此即使您不断添加行,网格仍可能不受约束。请详细说明并显示整个页面代码隐藏。