Question

J'utilise Visual Studio 2008 avec .NET Framework 3.5. J'ai un DataGrid avec un linkbutton à l'intérieur d'une templateColumn. J'essaie de comprendre comment désactiver la possibilité de cliquer sur le linkbutton une fois qu'il a été cliqué. Mon DataGrid a 6 colonnes avec la colonne Linkbutton Affichage des années et les autres affichant des données finales pour ces années. Lorsque un an est cliqué sur le DataGrid affiche une ventilation des données de cette année sur un mois par mois. Lorsque le DataGrid affiche le mois de la panne de mois, j'ai toujours besoin de la colonne d'année pour être visible mais sans la possibilité de cliquer. J'ai aussi un bouton et un tableau qui, par la visibilité par défaut, défini sur FALSE, mais après une année sélectionnée, la visibilité est définie sur True avec le bouton permettant de fermer la clôture du mois par une panne de mois et de retour à l'année. fin de la panne. J'ai tout ce qui fonctionne, sauf la désactivation du linkbutton.

Voici le code de My TemplateColumn de My DataGrid:

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

J'ai essayé ce qui suit:

Tentative 1 Utilisation du code derrière:

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

Tentative 2 Utilisation 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>

- La 3ème tentative a été proche qui a grillé le linkbutton mais n'a pas désactivé la capacité de cliquer Tentative 3 en utilisant la propriété "Activé":

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

Certaines autres pensées que j'ai incluées à l'aide d'un événement "ONCLICK" ou d'un "CommandArgument". J'ai essayé d'utiliser "OnClick" et dans le code derrière simplement en utilisant:

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

Toute aide, pensées, idées, exemples, etc. serait grandement appréciée. Merci à tous d'avance!

Code ajusté:

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

Était-ce utile?

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

Autres conseils

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());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top