首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用LinkButton in DataGrid TemplateColumn

禁用LinkButton in DataGrid TemplateColumn
EN

Stack Overflow用户
提问于 2011-05-17 15:26:52
回答 2查看 4.5K关注 0票数 1

我使用Visual 2008和.NET Framework3.5。我有一个DataGrid,在TemplateColumn里面有一个LinkButton。我正在试图找出如何禁用单击LinkButton的功能。我的DataGrid有6列,其中LinkButton列显示年份,其他列显示这些年份的年终数据。当单击“一年”时,DataGrid将逐月显示该年的数据细目。当DataGrid显示逐个月的细分时,我仍然需要显示年份列,但不能单击。我还有一个按钮和一个图表,默认情况下可见性设置为false,但在选定一年后,可见性设置为true,该按钮允许按月关闭,并返回到年底故障。除了禁用LinkButton之外,一切都在工作。

下面是我的DataGrid的TemplateColumn的代码:

代码语言:javascript
复制
<asp:TemplateColumn HeaderText="Year End">
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="lbYear" Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateColumn>

我尝试了以下几点:

尝试1使用后面的代码:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    LinkButton lb = ((LinkButton) FindControl("lbYear"));
    lb.Attributes.Add("onClick", "return false;");
}

使用Javascript的尝试2:

代码语言:javascript
复制
function disableLinkButton() {
    var lb = document.getElementById("lbYear");
    if (lb.disabled != true) { lb.disabled = true; return true; }
    }
    else { return false; }
}

<asp:TemplateColumn HeaderText="Year End">
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="lbYear" OnClientClick="disableLinkButton()" Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateColumn>

-第三次尝试接近,使LinkButtons灰暗,但没有禁用使用“已启用”属性单击“尝试3”的能力:

代码语言:javascript
复制
<asp:TemplateColumn HeaderText="Year End">
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="lbYear" Enabled='<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "year"))==1?Convert.ToBoolean("True"):Convert.ToBoolean("False") %>' Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateColumn>

我还有其他一些想法,包括使用“OnClick”事件或“命令”。我尝试使用'OnClick‘,在后面的代码中只使用:

代码语言:javascript
复制
LinkButton lb = ((LinkButton) FindControl("lbYear");
lb.Enabled = false;

任何帮助、想法、想法、例子等都将不胜感激。提前谢谢大家!

调整代码:

代码语言:javascript
复制
<ItemTemplate>
    <asp:LinkButton ID="lbYear" runat="server" OnClick="testClick" Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
    <a id="MyContrl_lbYear" href="javascript:__doPostBack('MyContrl$lbYear','')" onclick="this.href='#';this.disabled=true;__doPostBack('MyContrl$lbYear','');"></a>
</ItemTemplate>

protected void showChart(object sender, EventArgs e)
{
    LinkButton lbYear = ((LinkButton)FindControl("lbYear"));
    lbYear.Attributes.Add("onclick", "this.href='#';this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(lbYear, "").ToString());
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 12:44:33

政体,非常感谢你的帮助,我真的很感激。不过,我找到了另一种解决这个问题的方法。

.ASPX代码:

代码语言:javascript
复制
<TemplateColumn>
    <ItemTemplate>
        <asp:LinkButton runat="server" OnClick="test" Text='<%# DataBinder.Eval(Container, "DataItem.year") %></asp:LinkButton>
    </ItemTemplate>
</TemplateColumn>

.ASPX.CS代码:

代码语言:javascript
复制
protected void test(object sender, EventArgs e)
{
    foreach(var y in myDataGrid.Items)
    {
        LinkButton lb = ((y as TableRow).Cells[1].Controls[1] as LinkButton);
        lb.Enabled = false;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2011-05-17 15:37:25

选项3和最后一种方法似乎是可行的。LinkButtons的问题是,即使启用false,也不会阻止它们回发。请参阅:http://weblogs.asp.net/jeffwids/archive/2011/02/14/how-to-disable-an-asp-net-linkbutton-when-clicked.aspx

因此,您必须手动执行以下操作:

代码语言:javascript
复制
lb.Attributes.Add("onclick", "this.href='#';this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(lb, "").ToString());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6033217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档