2011-01-05 18 views
0

こんにちは、私はグリッドコントロールを持っており、私はステッカーのバインディングリストです。グリッドの上に、それはサイドグリッドです私は2つのボタンをステッカーとボイドステッカーを作成しています。 ステッカーには基本的に3つのプロパティActive、Void、Expiredが列にテキストとして表示されます。一度に1つのステッカーだけを追加するという条件があります。また、アクティブなステッカーがある場合、そのステッカーが期限切れまたは無効になるまで、別のステッカーを追加することはできません。グリッド行に基づいて無効化ボタンを有効にする

だから私はグリッドが読み込まれるたびにアクティブなテキストの列があると、作成/追加ステッカーが無効になり、無効になることがあります。私はフォローコードを使用しています

/// <summary> 
/// Handles the RowDataBound event of the gvSticker control. 
/// </summary> 
/// <param name="sender">The source of the event.</param> 
/// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewRowEventArgs"/> instance containing the event data.</param> 
/// <remarks></remarks> 
protected void gvSticker_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (Session["FisherId"] != null) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Label lblStatus = (Label)e.Row.FindControl("lblStickerStatus"); 

      if (lblStatus.Text.Contains("Active")) 
     { 
      btnAddSticker.Enabled = false; 
      btnVoidSticker.Enabled = true; 

       HyperLink hlStickerNum = (HyperLink)e.Row.FindControl("hlStickerNumber"); 
       hlStickerNum.Attributes.Add("style", 
         "cursor:hand;text-decoration:underline;font-weight:bold;"); 
      if (!string.IsNullOrEmpty(hlStickerNum.Text.Trim())) 
      { 
      string urlWithParameters = "Stickers.aspx?StickerId=" 
            + hlStickerNum.Text; 
        hlStickerNum.Attributes.Add("OnClick", "popWinNote('" + 
            urlWithParameters + "')"); 
       } 

      } 
      else 
      { 
       btnAddSticker.Enabled = true; 
       btnVoidSticker.Enabled = false; 
      } 

     } 
    } 
    else 
    { 
     btnAddSticker.Enabled = true; 
     btnVoidSticker.Enabled = false; 
    } 
} 

これはグリッドの最初の負荷でうまくいきます。しかし、私はグリッドのページインデックスを変更するたびに失敗します。ここで

更新

はイベント

/// <summary> 
    /// Handles the PageIndexChanging event of the gvSticker control. 
    /// </summary> 
    /// <param name="sender">The source of the event.</param> 
    /// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewPageEventArgs"/> instance containing the event data.</param> 
    /// <remarks></remarks> 
    protected void gvSticker_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     gvSticker.PageIndex = e.NewPageIndex; 
     BindStickerGrid(); 
    } 



/// <summary> 
     /// Binds the sticker grid. 
     /// </summary> 
     /// <param name="stickers">collection of stickers.</param> 
     /// <remarks></remarks> 
     protected void BindStickerGrid() 
     { 
      if (Session["FisherId"] != null) 
      { 
       Collection<Sticker> _stickerCollection = _manager.GetStickerDetailsForGrid(Session["FisherId"].ToString(), "fisher"); 

       if (_stickerCollection != null) 
       { 
        if (_stickerCollection.Count > 0) 
        { 
         gvSticker.DataSource = _stickerCollection; 
         gvSticker.DataBind(); 
        } 
       } 
      } 
     } 

答えて

1

を結合し、pageindexchangingされますがRowDataBoundイベントは、ページがロードされるたびに解雇されていることを確認していますか?私はGridViewコントロールは、ポストバックが発生したときにViewStateからデータを取得する可能性があると思う。

UPDATE

はたぶんあなたのロジックに誤りがあります。最後のステッカーがアクティブな場合は無効になり、最後のステッカーが無効の場合は反対になるように、行ごとにボタンを有効または無効にしています。あなたのRowDataBoundイベントハンドラで

  1. アクティブステッカーの数をカウントする(あるいは単にアクティブステッカーは、現在のページ上で発見されたかどうかを示すフラグを使用):ここには、私はあなたがすることをお勧めしたい方法です。
  2. PreRenderイベントを購読し、現在のページに表示されるアクティブなステッカーの数に応じて、適切な状態に切り替えます。

- パベル

+0

私の質問を参照してくださいが、私は私の答えを編集した方法 –

+0

の変更や結合、pageIndexパラメータのためのアップデートを追加しました。 – volpav

関連する問題