我在第一列中有一个带有链接按钮的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>
为什么没有按预期工作? 这就是我想要解决的问题。我怀疑我可能需要进行重新绑定或相关的事情,但我不太明白究竟发生了什么。因此,我不知道如何实现它。
答案 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;
}
}