【问题标题】:Disable LinkButton in DataGrid TemplateColumn在 DataGrid TemplateColumn 中禁用 LinkBut​​ton
【发布时间】:2011-08-27 08:30:15
【问题描述】:

我正在使用带有 .NET Framework 3.5 的 Visual Studio 2008。我在 TemplateColumn 中有一个带有 LinkBut​​ton 的 DataGrid。我试图弄清楚如何禁用单击 LinkBut​​ton 后单击它的功能。我的 DataGrid 有 6 列,其中 LinkBut​​ton 列显示年份,其他列显示这些年份的年终数据。单击某一年时,DataGrid 会按月显示该年数据的明细。当 DataGrid 显示逐月细分时,我仍然需要显示年份列,但无法单击。我还有一个按钮和一个图表,默认情况下 Visibility 设置为 false,但在选择一年后,Visibility 设置为 true,按钮可以关闭逐月细分并返回年份结束崩溃。除了禁用 LinkBut​​ton 之外,我一切正常。

这是我的 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>

-- 第三次尝试已关闭,它确实使 LinkBut​​tons 变灰,但没有禁用单击它们的能力 尝试 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());
}

【问题讨论】:

    标签: c# datagrid asplinkbutton


    【解决方案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());
    

    【讨论】:

    • 我编辑了我的原始帖子,最后添加了“调整代码”部分。我一定是在错误的地方添加了一些东西?
    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多