DataGrid TemplateColumn の LinkButton を無効にする
-
14-11-2019 - |
質問
Visual Studio 2008 と .NET Framework 3.5 を使用しています。TemplateColumn 内に LinkButton を持つ DataGrid があります。LinkButton がクリックされた後にクリックする機能を無効にする方法を見つけようとしています。私の DataGrid には 6 つの列があり、LinkButton 列には年が表示され、その他の列にはその年の年末データが表示されます。年をクリックすると、DataGrid にその年のデータの内訳が月ごとに表示されます。DataGrid に月ごとの内訳が表示されている場合でも、年列を表示する必要がありますが、クリックすることはできません。また、ボタンとチャートもあり、デフォルトでは可視性が false に設定されていますが、年を選択すると可視性が 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>
- 3回目の試みは近づいていました。これはLinkButtonsを灰色にしましたが、「有効」プロパティを使用して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());