0

3つのグリッドビューコントロールの内容を制御するドロップダウンリストがあります。これらはWebパーツで使用されます。ただし、ドロップダウンリストのselectedindexchangedメソッドがイベントを発生させるたびに、依存するグリッドビューのコンテンツがグリッドビューの別のレンダリングを追加します。したがって、これらのグリッドビューのコンテンツは2倍、さらには3倍になります。

私は次のコードを持っています:

-> 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コントロールの1つ:

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メソッドは、グリッドビューの属性のみを定義します。誰かがこの誤ったレンダリングの問題について私を助けてくれますか?ありがとう。

4

1 に答える 1

0

CreateChildControls と ddl_SelectedIndexChanged は両方とも、項目がドロップダウン リストから選択されたときに実行されるため、ProfileGrid メソッドは、これが発生したときにすべての子コントロールを各 GridView に 2 回追加します。ただし、これにより物事が3倍になる理由はわかりません。

SelectedIndexChanged イベントでグリッド レイアウトを再作成する必要はありません。CreateChildControls で既に作成されています。データソースを設定するだけです。ProfileGrid(..) のコードの最初の 4 行を分割し、ピック リスト項目が選択されたときにそれのみを呼び出します。

たとえば、SelectedIndexChanged で発生しないことが確実でない限り、CreateChildControls でデータバインドしないでください。たとえば、ページがポストされる理由が他にないと仮定すると、ポストバックの場合はそこでデータ バインディングをスキップできます。ただし、どちらの方法でも機能します。冗長/非効率的です。

于 2010-10-19T16:27:30.757 に答える