这是我的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。有没有人对此有任何想法?
答案 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;
}