DataGrid TemplateColumn에서 LinkButton 비활성화
-
14-11-2019 - |
문제
.NET Framework 3.5와 함께 Visual Studio 2008을 사용하고 있습니다.TemplateColumn 내부에 LinkButton이 있는 DataGrid가 있습니다.LinkButton을 클릭한 후 클릭하는 기능을 비활성화하는 방법을 알아내려고 합니다.내 DataGrid에는 연도를 표시하는 LinkButton 열과 해당 연도의 연말 데이터를 표시하는 다른 열이 있는 6개의 열이 있습니다.연도를 클릭하면 DataGrid에 해당 연도의 데이터가 월 단위로 분석되어 표시됩니다.DataGrid가 월별 분석을 표시할 때 연도 열을 표시해야 하지만 클릭할 수는 없습니다.또한 기본적으로 가시성이 false로 설정되어 있는 버튼과 차트가 있지만, 1년을 선택한 후에는 월별 분석을 종료하고 해당 연도로 돌아갈 수 있는 버튼을 사용하여 가시성이 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>
나는 다음을 시도했습니다 :
코드 숨김을 사용하여 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>
- 링크 부트 톤을 회색으로 만들었지 만 'enabled'속성을 사용하여 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());