2011-05-17 51 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