문제

.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());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top