【问题标题】:dropdownlist disable in asp.net在 asp.net 中禁用下拉列表
【发布时间】:2013-10-23 17:03:14
【问题描述】:

当管理员批准/拒绝任何文档一次,然后当管理员再次登录时,他/她将无法再次批准/拒绝文档,并且下拉列表将仅适用于那些可以批准/拒绝然后管理员查看任何文档的文档新文档然后下拉将被启用,当管理员批准/拒绝此文档时,它将禁用下拉列表以再次不批准/拒绝

为此我这样做

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Find the DropDownList in the Row

        DropDownList abc = (e.Row.FindControl("DropDownList9") as DropDownList);
        abc.Enabled = false;
    }
}

但是这段代码告诉我所有的下拉列表都被禁用了。

任何解决方案我将如何做到这一点?

【问题讨论】:

  • 你真的应该改写这篇文章。这是一个冗长的句子。
  • 您的数据源是什么 - DataSet、DataTable 或 IEnumerable?请发布您的数据源。
  • 我可以显示表格中的数据..

标签: c# asp.net


【解决方案1】:

根据您的评论,我假设您的 DataSource 是 DataTable 或 DataSet。

如果是这样,您想在 RowDataBound Event 中将 DataItem 强制转换为 DataRowView 以获取状态列的值。

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:TemplateField HeaderText="Status">
            <ItemTemplate>
                <asp:DropDownList runat="server" ID="DropDownList9">
                    <asp:ListItem Text="Approve" Value="1" />
                    <asp:ListItem Text="Reject" Value="2" />
                    <asp:ListItem Text="Pending" selected="selected" Value="3">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var table = new DataTable();
        table.Columns.Add("Id", typeof (int));
        table.Columns.Add("Name", typeof (string));
        table.Columns.Add("ApproveID", typeof(string));

        table.Rows.Add(1, "Jon Doe", "1");
        table.Rows.Add(2, "Eric Newton", "2");
        table.Rows.Add(3, "Marry Doe", "3");

        GridView1.DataSource = table;
        GridView1.DataBind();
    }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var item = e.Row.DataItem as DataRowView;

        var dropDownList = e.Row.FindControl("DropDownList9") as DropDownList;

        // Get value from ApproveID column, 
        // and check whehter Approve, Reject or others.
        switch (item["ApproveID"].ToString())
        {
            case "1":
            case "2":
                dropDownList.Enabled = false;
                break;
            default:
                dropDownList.Enabled = true;
                break;
        }
    }
}

【讨论】:

  • 感谢您的回复,但它显示错误“状态既不是 DataColumn 也不是表 Table 的 DataRelation。”
  • 以上代码仅用于演示。 您需要根据您的应用程序替换该列。很可能是 ApproveID。请参阅我的更新答案。
  • 当管理员查看新文档时,这个下拉列表被禁用,但是当管理员查看新文档时我如何启用它?
【解决方案2】:

您需要从每一行访问数据项,我假设它在您绑定到网格的对象上可用,并确定它们是否已被批准/拒绝。如果是这样,那么你应该运行你的逻辑来禁用:

        protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                var yo = (YOUR-OBJECT)e.Row.DataItem;

                if(yo.Status !== null OR yo.Status != 'Not Reviewed'){
                //Find the DropDownList in the Row
                DropDownList abc = (e.Row.FindControl("DropDownList9") 
                as  DropDownList);
                abc.Enabled = false;

                }

            }

        }

【讨论】:

  • 什么是“(你的对象)”??
  • 他绑定到这个网格的任何对象,没有提供
【解决方案3】:

您可以使用此代码询问您在哪一行:

if (e.Row.RowIndex == <aRowNumber>)
{
    ...
}

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 2021-01-09
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2020-03-21
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多