链接按钮未被禁用,如何禁用网格视图中的链接按钮?

时间:2017-05-09 17:22:03

标签: c# asp.net

我在第一列中有一个带有链接按钮的Gridview。单击链接按钮后,我想打开一个窗口,但我也想禁用链接按钮。

无效 一旦我点击链接按钮,窗口行为就是预期的行为。但是,未禁用链接按钮。因此允许我一遍又一遍地点击它。

前端是:

std::vector<std::list<int> > arr;
for(const auto & i : arr) {
   auto first = i.begin();
   auto last = i.end();
   while (first != last) {
      std::cout << *first << std::endl;
      ++first;
   }
}

GetviewonClientClick方法:

<asp:LinkButton runat="server" ID="lnkbtnView" CommandArgument='<%# Eval("Id")%>' OnCommand="GetViewOnClientClick" >View<br/></asp:LinkButton>

为什么没有按预期工作? 这就是我想要解决的问题。我怀疑我可能需要进行重新绑定或相关的事情,但我不太明白究竟发生了什么。因此,我不知道如何实现它。

1 个答案:

答案 0 :(得分:0)

我从未找到过在该方法中编辑控件的解决方案。我所做的是阅读网格视图事件的周期。

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview_events(v=vs.110).aspx

如果您阅读上一个链接,您就会知道,一旦您点击一条记录,它就会触发对RowDataBound事件的调用。因此;在RowDataBound事件中,您可以访问控件并应用逻辑来编辑控件的属性(例如颜色,禁用,启用......)。

因此,因为我在这个网格视图中有两种类型的记录,所以我需要存储并保持点击的记录。

这是我跟踪点击的行的修复方法:

    protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            gvs.SetHeaderArrows(e);
        }

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            int Id = (int)(e.Row.RowIndex);
            int? inspID = convert.ToIntQ(DataBinder.Eval(e.Row.DataItem, "InspectionID"));
            string rowclicked = string.Format("clickedrow{0}", Id);

            if (convert.ToIntQ(Session[rowclicked]) != null)
            {

                if (Id == Convert.ToInt32(Session[rowclicked]))
                {
                    LinkButton button = (LinkButton) e.Row.FindControl("lnkbtnView");
                    button.ForeColor = Color.Gray;
                    button.Enabled = false;

                }

                else
                {
                    LinkButton button = (LinkButton)e.Row.FindControl("lnkbtnView");
                    button.ForeColor = Color.DarkBlue;
                    button.Enabled = true;

                }

            }