我有一个下拉列表,用于控制3个gridview控件的内容。这些用于webpart。但是,每次下拉列表的selectedindexchanged方法触发事件时,从属网格视图的内容都会添加另一个网格视图呈现。因此,它会使这些网格视图的内容翻倍甚至三倍。
我有以下代码:
- >用于CreatChildControls方法:
ProfileGrid(_gridProf, _dtProf, _infoObj, _column, _imgColumn, _ddl, _strConn, _id);
Controls.Add(_gridProf);
Controls.Add(new LiteralControl("<br />"));
PhysicalGrid(_gridPhys, _dtPhys, _infoObj, _column, _ddl, _strConn, _id);
Controls.Add(_gridPhys);
Controls.Add(new LiteralControl("<br />"));
LabGrid(_gridLab, _dtLab, _infoObj, _column, _ddl, _strConn, _id);
Controls.Add(_gridLab);
Controls.Add(new LiteralControl("<br />"));
- &gt;用于SelectedIndexChanged方法:
private void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
ProfileGrid(_gridProf, _dtProf, _infoObj, _column, _imgColumn, _ddl, _strConn, _id);
PhysicalGrid(_gridPhys, _dtPhys, _infoObj, _column, _ddl, _strConn, _id);
LabGrid(_gridLab, _dtLab, _infoObj, _column, _ddl, _strConn, _id);
}
- &gt;用于其中一个GridView控件:
private void ProfileGrid(GridView grid, DataTable dt, InfoAccess infoObj, BoundField column, ImageField imgColumn, DropDownList ddl, string strConn, string id)
{
string query = "exec spr_VITALITY_SCORE '" + id + "', '" + (ddl.SelectedValue == "" ? DateTime.Now.Year.ToString() : ddl.SelectedValue.ToString()) + "'";
infoObj.StrConn = strConn;
dt = infoObj.SQLResult(query);
grid.DataSource = dt;
column.DataField = "SCORE";
column.HeaderText = "Score";
grid.Columns.Add(column);
imgColumn.DataImageUrlField = "VITALITY_COLOR";
imgColumn.DataImageUrlFormatString = "../../Style%20Library/OHImages/{0}";
imgColumn.HeaderText = "Vitality Color";
grid.Columns.Add(imgColumn);
column = new BoundField();
column.DataField = "VITALITY_DEFINITION";
column.HeaderText = "Vitality Definition";
grid.Columns.Add(column);
column = new BoundField();
column.DataField = "REMARKS";
column.HeaderText = "Remarks";
grid.Columns.Add(column);
DesignGrid(_gridProf);
_gridProf.Attributes.Add("Style", "text-align:center;");
}
DesignGrid方法仅定义gridviews的属性。 任何人都可以帮我解决这个不正确的渲染问题吗? 感谢。
答案 0 :(得分:0)
CreateChildControls和ddl_SelectedIndexChanged都将在从下拉列表中选择一个项目时运行,因此当发生这种情况时,ProfileGrid方法会将所有子控件添加到每个GridView两次。我不知道为什么这会导致事情增加三倍。
您不需要在SelectedIndexChanged事件中重新创建网格布局,它已在CreateChildControls中创建。您只需要设置数据源。在ProfileGrid(..)中打破前四行代码,并仅在选择了选择列表项时调用它。
理想情况下,你也不会两次数据绑定,例如:你不应该在CreateChildControls中数据绑定,除非你确定它不会发生在SelectedIndexChanged中。例如,如果它是回发,你可以跳过那里的数据绑定,假设没有其他原因将页面发布到。但它仍然可以工作,只是多余/低效。