0

グリッドビューに、その中のコンテンツへのハイパーリンクをプログラムで受け取るバウンドフィールドがあります。ドロップダウン リスト インデックスの変更後、新しいデータセットを取得します。データセットの列の 1 つは、データのあるフィールドへのリンクを適用し、データのないフィールドをスキップします。以下のリンクを適用するための私のロジックを確認できます。

if (e.Row.DataItem != null && int.TryParse(e.Row.Cells[4].Text, out incidents))
{
  HyperLink incidentsLink = new HyperLink();
  incidentsLink.ForeColor = System.Drawing.Color.Blue;
  incidentsLink.NavigateUrl = "~/somesite.aspx?no=" + stnNum + "&dt=" + date;
  incidentsLink.Text = e.Row.Cells[4].Text;
  e.Row.Cells[4].Controls.Add(incidentsLink);
}

これは、グリッドビューの OnRowDataBound に適用されます。次に、別のドロップダウンリストに接続された別のグリッドビューがあります。いずれかのドロップダウン リストがインデックスを変更すると、関連するグリッドビューの新しいデータセットが取得され、更新パネルを使用して ajax 更新が開始されます。

2 番目のグリッドビューが更新されると、最初のグリッドビューのリンクが消去されます。テキストは消去されませんが、そのまま残りますが、テキストはリンクに固定されなくなります。この方法で作成され、グリッドビューに配置されたすべてのリンクは、リンク プロパティを失いますが、asp:HyperLinkField を使用して作成されたフィールドは変更されません。問題は、stnNum と日付が最初のグリッドビューで返されるデータセットの一部ではないため、グリッドビューが既に構築された後にそれらをリンクとして追加する必要があることです。

私が考えることができる唯一の解決策は、2番目のグリッドビューが更新されるたびにグリッドビューにリンクを追加する関数を再起動することです。他の解決策が役立つか、リンクが消去されている理由についての説明があれば幸いです。

4

1 に答える 1

0

POSTBACK がない場合にのみ、GridView/DropDowns をバインドしてみてください。POST Back イベントにより、グリッドビューとコントロールのデータが何らかの形で失われると思います。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
    // Bind your Grids & Dropdowns here on page load
    }
}
于 2012-05-07T20:18:27.437 に答える