Domanda

Sto usando Visual Studio 2008 con .NET Framework 3.5. Ho un datagrid con un linkButton all'interno di un templatecolumn. Sto cercando di capire come disabilitare la possibilità di fare clic sul tasto LinkButton una volta che è stato cliccato. Il mio dataGrid ha 6 colonne con la colonna di collegamento di collegamento che visualizza anni e gli altri che visualizzano i dati di fine anno per quegli anni. Quando si fa clic su un anno, il DataGrid visualizza una ripartizione dei dati di quell'anno in un mese per mese. Quando il DataGrid visualizza la rottura del mese per mese, ho ancora bisogno della colonna dell'anno da visibile ma senza la possibilità di fare clic. Ho anche un pulsante e un grafico che, per predefinito la visibilità è impostato su FALSE, ma dopo un anno è selezionato la visibilità è impostata su TRUE con il pulsante che dà la possibilità di chiudere la rottura del mese per mese e tornare all'anno fine rottura. Ho tutto il lavoro eccetto la disabilitazione del linkButton.

Ecco il codice per il My DataGrid's TemplateColumn:

<asp:TemplateColumn HeaderText="Year End">
    <ItemTemplate>
        <asp:LinkButton runat="server" ID="lbYear" Text='<%# DataBinder.Eval(Container, "DataItem.year") %>'></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateColumn>
.

Ho provato quanto segue:

Tentativo 1 Utilizzo del codice dietro:

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

Tentativo 2 Utilizzo di JavaScript:

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>
.

- Il 3 ° tentativo era chiuso che ha fatto il grigio i linkbuttons ma non ha disabilitato la possibilità di fare clic Tentativo 3 Utilizzo della proprietà 'abilitata':

<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>
.

Alcuni altri pensieri che ho comprensi utilizzando un evento "onclick" o un 'commandargument'. Ho provato a usare 'onclick' e nel codice dietro semplicemente usando:

LinkButton lb = ((LinkButton) FindControl("lbYear");
lb.Enabled = false;
.

Qualsiasi aiuto, pensieri, idee, esempi, ecc. Sarebbe molto apprezzato. Grazie con tutti in anticipo!

Codice regolato:

<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());
}
.

È stato utile?

Soluzione 2

Polity, thank you very much for your help, I really appreciate it. I found a different way to go about fixing this issue though.

.ASPX Code:

<TemplateColumn>
    <ItemTemplate>
        <asp:LinkButton runat="server" OnClick="test" Text='<%# DataBinder.Eval(Container, "DataItem.year") %></asp:LinkButton>
    </ItemTemplate>
</TemplateColumn>

.ASPX.CS Code:

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

Altri suggerimenti

Option 3 and your last approach seem to be the way to go. The problem with LinkButtons is that even by putting Enabled on false, you wont block them from posting back. See: http://weblogs.asp.net/jeffwids/archive/2011/02/14/how-to-disable-an-asp-net-linkbutton-when-clicked.aspx

Therefore you have to do this manually with:

lb.Attributes.Add("onclick", "this.href='#';this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(lb, "").ToString());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top