对GridView TemplateField禁用而不是Visible = false?

时间:2015-07-21 16:20:24

标签: c# asp.net webforms

我目前正在asp:TemplateField隐藏GridView列,其中GridViewEmps.Columns[12].Visible = false来自代码隐藏。这是正常的。

但是我想禁用(或只读)整个GridView列,而不是隐藏它。如果这太难了,请禁用此列中的DropDownList(id DropDownListActive)。目的是在某些情况下无法更改列的内容。例如,如果进行了特定搜索,则禁用此列。否则,它已启用编辑。

以下是设置可见性的代码。我想从可见变为只读/禁用:

protected void Btn_Search_Click(object sender, EventArgs e)
{
    //Bind gridview to DataTable

    string empStatus = this.DropDownListStatus.SelectedValue;

    if (empStatus == "N/A")
    {
        GridViewEmps.Columns[12].Visible = false;
    }
    else 
    {
        GridViewEmps.Columns[12].Visible = true;
    }
}

模板字段:

<asp:TemplateField HeaderText="Active" ItemStyle-Width="80px">
    <EditItemTemplate>
      <asp:DropDownList ID="DropDownListActive" SelectedValue='<%#Eval("Status")%>' runat="server">
         <asp:ListItem Text="N/A" Value="--" Selected="True"></asp:ListItem>
         <asp:ListItem Text="Active" Value="Active"></asp:ListItem>
      </asp:DropDownList>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="LabelPrvStatus" runat="server" Text='<%# Bind("PrevStatus") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

感谢。

2 个答案:

答案 0 :(得分:0)

DropDownListActive.Enabled = false;

DropDownListActive.IsEnabled = false;

(取决于sdk版本)

整个容器都不可能,只适用于儿童控制。

答案 1 :(得分:0)

你说你使用的是TemplateField,为什么不能只禁用标记中的控件?

<asp:TemplateField>
    <ItemTemplate>
        <asp:DropDownList runat="server" ID="DropDownListActive" Enabled="false" />
    </ItemTemplate>
</asp:TemplateField>

修改

根据您提供给我的信息并说明

  

您无需知道何时启用或禁用;你只需要   知道IF语句将列设置为visible = true和ELSE   将列设置为visible = false

这是我能做的最好的,希望有所帮助

<asp:TemplateField>
    <ItemTemplate>
        <asp:DropDownList runat="server" ID="DropDownListActive" Enabled='<%# (int)Eval("ValueIDontNeedToKnow") == varToPassTheIfStatement) ? true : false %>' />
    </ItemTemplate>
</asp:TemplateField>