禁用gridviewtemplatefield而不是Visible = false

本文关键字:Visible false gridviewtemplatefield 禁用 | 更新日期: 2023-09-27 18:03:45

我目前在我的GridView中隐藏了asp:TemplateField列,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;
    }
}

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

谢谢。

禁用gridviewtemplatefield而不是Visible = false

DropDownListActive.Enabled = false;

DropDownListActive.IsEnabled = false;

(取决于SDK版本)

不可能用于整个容器,只能用于子控件

您说您正在使用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>