Вопрос

Я использую Visual Studio 2008 с .NET Framework 3.5.У меня есть DataGrid с LinkButton внутри TemplateColumn.Я пытаюсь выяснить, как отключить возможность щелкнуть кнопку LinkButton после ее нажатия.Мой DataGrid имеет 6 столбцов, причем столбец LinkButton отображает годы, а остальные отображают данные на конец года за эти годы.При нажатии на год DataGrid отображает разбивку данных за этот год по месяцам.Когда DataGrid отображает разбивку по месяцам, мне все равно нужно, чтобы столбец года был виден, но без возможности щелкнуть его.У меня также есть кнопка и диаграмма, для которой по умолчанию для параметра «Видимость» установлено значение «ложь», но после выбора года для параметра «Видимость» устанавливается значение «истина», а кнопка дает возможность закрыть разбивку по месяцам и вернуться к году. окончательный развал.У меня все работает, кроме отключения LinkButton.

Вот код для моего TemplateColumn DataGrid:

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

Попытка 2 с использованием 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>

- 3-я попытка была близка, которая выпустила Gray, но не отключила возможность щелкнуть их Попытка 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

Полития, большое спасибо за помощь, я очень ценю это.Однако я нашел другой способ решить эту проблему.

.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