1

.NET Framework 3.5 で Visual Studio 2008 を使用しています。TemplateColumn 内に LinkBut​​ton を持つ DataGrid があります。LinkBut​​ton をクリックした後にクリックする機能を無効にする方法を見つけようとしています。私の DataGrid には 6 つの列があり、LinkBut​​ton 列には年が表示され、他の列にはその年の年末データが表示されます。年をクリックすると、DataGrid にその年のデータの内訳が月ごとに表示されます。DataGrid が月ごとの内訳を表示している場合でも、年列を表示する必要がありますが、クリックすることはできません。また、デフォルトで可視性がfalseに設定されているボタンとチャートもありますが、年が選択された後、可視性はtrueに設定され、ボタンを使用して月ごとの内訳を閉じて年に戻ることができます内訳を終了します。

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

-- 3 回目の試みは終了し、LinkBut​​tons はグレー表示されましたが、それらをクリックする機能は無効になりませんでした。

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

2 に答える 2

1

オプション3とあなたの最後のアプローチが道のりのようです。LinkBut​​tons の問題は、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());
于 2011-05-17T15:37:25.410 に答える
0

ポリティさん、お世話になりました、本当にありがとうございました。ただし、この問題を修正する別の方法を見つけました。

.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;
    }
}
于 2011-05-18T12:44:33.640 に答える