0

我有一个下拉列表来控制 3 个 gridview 控件的内容。这些在 Web 部件中使用。但是,每次下拉列表的 selectedindexchanged 方法触发事件时,依赖的 gridview 的内容都会添加另一个 gridview 渲染。因此,它会使这些网格视图的内容翻倍甚至三倍。

我有以下代码:

-> 对于 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 />"));

-> 对于 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);
}

-> 对于 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 的属性。谁能帮我解决这个不正确的渲染问题?谢谢。

4

1 回答 1

0

当从下拉列表中选择一个项目时,CreateChildControls 和 ddl_SelectedIndexChanged 都将运行,因此 ProfileGrid 方法将在发生这种情况时将所有子控件添加到每个 GridView 两次。不过,我不确定为什么这会导致事情增加两倍。

您无需在 SelectedIndexChanged 事件中重新创建网格布局,它已在 CreateChildControls 中创建。您只需要设置数据源。分解 ProfileGrid(..) 中的前四行代码,并仅在选择选择列表项时调用。

理想情况下,您也不会进行两次数据绑定,例如,您不应该在 CreateChildControls 中进行数据绑定,除非您确定它不会在 SelectedIndexChanged 中发生。例如,如果它是回发,您可以跳过那里的数据绑定,假设没有其他原因将页面发布到。但它仍然可以工作,只是多余/低效。

于 2010-10-19T16:27:30.757 回答