Привет, у меня есть элемент управления сеткой, где я связываю список наклеек. На сетке выше, то есть вне сетки, у меня есть две кнопки Создать стикер и Пустой стикер.
Стикер в основном имеет три свойства Active, Void и Expired, отображаемые в виде текста в столбце. Существует условие добавления только одной наклейки за раз. Также, если есть активная наклейка, пользователь не может добавить другую наклейку до тех пор, пока не истечет срок ее действия или он не будет аннулирован.
Итак, я хочу, чтобы при загрузке моей сетки, если есть столбец с активным текстом, стикер создания / добавления отключается, а void включается. Я использую следующий код
/// <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();
}
}
}
}