ASP.NET DataGrid按条件选择ItemTemplate

时间:2014-02-01 08:26:33

标签: asp.net datagrid .net-4.0

这是我的DataGrid:

 <asp:DataGrid ID="dgAll" runat="server"  AutoGenerateColumns="false">
            <Columns>
                <asp:TemplateColumn>
                    <ItemTemplate>
                        <asp:TextBox ID="txtB" runat="server" Text='<%#Eval("Value")%>' ></asp:TextBox>
                    </ItemTemplate>
                    <ItemTemplate>
                        <asp:DropDownList ID="drdL" runat="server" DataSource='<%#GetComboData(Eval("Value"))%>'></asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateColumn>
            </Columns>
        </asp:DataGrid>

如你所见,我有一个TextBox和一个DropDownList,但我每行只需要其中一个,所以问题是如何按条件选择ItemTemplate,假设Eval("Type") == "TextBox")我需要TextBox和if { {1}}我需要在该行中使用DropDown。有没有人对此有任何想法?

2 个答案:

答案 0 :(得分:1)

您可以在同一模板字段中使用这两个控件,并使用以下代码

<asp:DataGrid ID="dgAll" runat="server"  AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                 <asp:TextBox ID="txtB" runat="server" Text='<%#Eval("Value")%>'
                      Visible ='<%# Eval("Type").ToString()=="TextBox"%'>
                 </asp:TextBox>
                 <asp:DropDownList ID="drdL" runat="server" 
                      DataSource='<%#GetComboData(Eval("Value"))%>'
                      Visible ='<%# Eval("Type").ToString()!="TextBox"%'>
                 </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
</asp:DataGrid>

答案 1 :(得分:0)

为什么要使用几个asp:TemplateColumn,你也可以使用它,

<asp:TemplateColumn>
    <ItemTemplate>
     <asp:TextBox ID="txtB" runat="server" Text='<%#Eval("Value")%>' Visible="false" ></asp:TextBox>
     <asp:DropDownList ID="drdL" runat="server" Visible="false"></asp:DropDownList>
    </ItemTemplate>
 </asp:TemplateColumn>

并在Grid的ItemDataBound事件中

protected void dgAll_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemIndex == -1) return;

            if (e.Item.ItemIndex % 2 == 0)
                e.Item.FindControl("drdL").Visible = true;
            else
                e.Item.FindControl("txtB").Visible = true;
        }