C# 是否禁用GridView TemplateField而不是Visible=false?

C# 是否禁用GridView TemplateField而不是Visible=false?,c#,asp.net,webforms,C#,Asp.net,Webforms,我当前正在使用gridviewmps.Columns[12]在我的GridView中隐藏一个asp:TemplateField列。可见=false来自代码隐藏。这是正确的 但我不想隐藏它,而是想禁用(或只读)整个GridView列。如果这太困难,则禁用此列中的DropDownList(iddropdownlistative)。目的是在某些情况下无法更改列的内容。例如,如果进行了特定搜索,则此列将被禁用。否则,将启用它进行编辑 下面是设置可见性的代码。我想从可见更改为只读/禁用: protecte

我当前正在使用
gridviewmps.Columns[12]在我的
GridView
中隐藏一个
asp:TemplateField
列。可见=false
来自代码隐藏。这是正确的

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

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

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;
    }
}
和templatefield:

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

谢谢

DropDownListActive.Enabled = false;

(取决于sdk版本)

整个容器不可能,仅子控件不可能

(取决于sdk版本)


对于整个容器来说是不可能的,只有子控件。

您说过您正在使用
模板字段,那么为什么不能在标记中禁用该控件呢

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

您说过您正在使用一个
模板字段,那么为什么不能禁用标记中的控件呢

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


GridViewEmps.Columns[12]。只读=true?这对您不起作用吗?我在vs2010
autocomplete
中没有看到ReadOnly属性。这是绑定列还是自动生成的?如果它是绑定的,您可以将只读属性放在“否”中,因为它是一个TemplateField.GridViewEmps.Columns[12]。ReadOnly=true?这对您不起作用吗?我在vs2010
autocomplete
中没有看到ReadOnly属性。这是绑定列还是自动生成的?如果它是绑定的,你可以将只读属性放在No中,我发布了它是一个TemplateField。我编辑了这个问题。它不能总是只读的。根据搜索的不同,它被禁用(或隐藏为当前状态)或启用编辑。您说过我想禁用(或只读)整个GridView列,编辑您的问题,还有,如果进行了特定搜索,您的意思是什么,我如何知道何时启用或禁用?您不需要知道何时启用或禁用;您只需要知道IF语句将列设置为visible=true,ELSE将列设置为visible=false。但为了便于讨论,我发布了代码。我编辑了问题。它不能总是只读的。根据搜索的不同,它被禁用(或隐藏为当前状态)或启用编辑。您说过我想禁用(或只读)整个GridView列,编辑您的问题,还有,如果进行了特定搜索,您的意思是什么,我如何知道何时启用或禁用?您不需要知道何时启用或禁用;您只需要知道IF语句将列设置为visible=true,ELSE将列设置为visible=false。但为了便于讨论,我已经发布了代码。