禁用 DataGrid TemplateColumn 中的 LinkButton
-
14-11-2019 - |
题
我正在使用 Visual Studio 2008 和 .NET Framework 3.5。我有一个 DataGrid,在 TemplateColumn 内有一个 LinkButton。我试图弄清楚如何禁用单击 LinkButton 后单击它的功能。我的 DataGrid 有 6 列,其中 LinkButton 列显示年份,其他列显示这些年份的年末数据。单击某一年时,DataGrid 会按月显示该年数据的详细信息。当 DataGrid 显示按月细分时,我仍然需要年份列可见,但无法单击。我还有一个按钮和一个图表,默认情况下“可见性”设置为“假”,但选择一年后,“可见性”设置为“真”,该按钮可以关闭按月细分并返回到年份结束崩溃。除了禁用 LinkButton 之外,一切都正常。
这是我的 DataGrid 的 TemplateColumn 的代码:
<asp:TemplateColumn HeaderText="Year End">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lbYear" Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
我已经尝试过以下方法:
尝试 1 使用代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
LinkButton lb = ((LinkButton) FindControl("lbYear"));
lb.Attributes.Add("onClick", "return false;");
}
使用 JavaScript 的尝试 2:
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的能力:
<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”事件或“CommandArgument”。我尝试使用“OnClick”并在后面的代码中简单地使用:
LinkButton lb = ((LinkButton) FindControl("lbYear");
lb.Enabled = false;
任何帮助、想法、想法、例子等。将不胜感激。谢谢大家!
调整后的代码:
<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());
}
解决方案 2
Polity,非常感谢您的帮助,我真的很感激。不过,我找到了一种不同的方法来解决这个问题。
.ASPX 代码:
<TemplateColumn>
<ItemTemplate>
<asp:LinkButton runat="server" OnClick="test" Text='<%# DataBinder.Eval(Container, "DataItem.year") %></asp:LinkButton>
</ItemTemplate>
</TemplateColumn>
.ASPX.CS代码:
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;
}
}
其他提示
选项 3 和你最后的方法似乎是正确的选择。LinkButtons 的问题在于,即使将 Enabled 设置为 false,您也不会阻止它们回发。看: http://weblogs.asp.net/jeffwids/archive/2011/02/14/how-to-disable-an-asp-net-linkbutton-when-clicked.aspx
因此,您必须手动执行此操作:
lb.Attributes.Add("onclick", "this.href='#';this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(lb, "").ToString());