2011-05-17 43 views
0

我在.NET Framework 3.5中使用Visual Studio 2008。我在TemplateColumn中有一个带有LinkBut​​ton的DataGrid。我想弄清楚如何禁用点击LinkBut​​ton后点击的能力。我的DataGrid有6列,LinkBut​​ton列显示年份,其他显示年份的年末数据。点击一年后,DataGrid会逐月显示该年份数据的细目。当DataGrid逐月显示故障时,我仍然需要显示年份列,但无法点击。我还有一个按钮和一个图表,默认情况下可见性设置为false,但选中一年后,可见性设置为true,按钮可以关闭月份分解和返回到年份最终崩溃。除了禁用LinkBut​​ton之外,我有一切工作。在DataGrid TemplateColumn中禁用LinkBut​​ton

这里是我的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> 

:使用Javascript

protected void Page_Load(object sender, EventArgs e) 
{ 
    LinkButton lb = ((LinkButton) FindControl("lbYear")); 
    lb.Attributes.Add("onClick", "return false;"); 
} 

尝试2:使用代码隐藏

尝试1

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> 

- 第三届试图接近这确实是灰色不可用了LinkBut​​ton,但并没有禁止使用的“已启用”属性,点击它们 尝试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()); 
} 

回答

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; 
    } 
} 
1

选择3,你的最后的办法似乎是要走的路。 LinkBut​​tons的问题在于,即使将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()); 
+0

我编辑我原来的职位,并在最后一个 “调整代码” 部分。我必须在错误的地方添加一些东西? – Brian 2011-05-17 16:41:03