我正在使用Visual Studio 2008和.NET Framework 3.5。我在TemplateColumn中有一个带有LinkButton的DataGrid。我试图找出如何禁用单击LinkButton后单击它的功能。我的DataGrid有6列,LinkButton列显示年份,其他列显示那些年份的年终数据。单击一年时,DataGrid会逐月显示该年度数据的明细。当DataGrid显示逐月分解时,我仍然需要年份列可见但无法单击。我还有一个按钮和一个图表,默认情况下,Visibility设置为false,但是选择一年后,Visibility设置为true,按钮可以关闭月份细分并返回年份结束故障。除了禁用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>
我尝试了以下内容:
尝试使用背后的代码:
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使用'Enabled'属性:
<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());
}
答案 0 :(得分:1)
选项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());
答案 1 :(得分:0)
政治,非常感谢你的帮助,我真的很感激。我发现了解决这个问题的另一种方法。
.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;
}
}