我试图从后面的代码中有条件地隐藏DetailsView行。我希望能够基于某种条件调用SomeMethod,并让它隐藏第12行。有人知道我如何才能做到这一点吗?
我已经使用调试器来确认Row12是正确的行,并且正在执行该方法。
protected void SomeMethod(object sender, EventArgs e)
{
DetailsView1.Rows[12].visible= false;
//Alternative methods I attempted that also did not work.
//DetailsViewRow row = DetailsView1.DataItem as DetailsViewRow;
//row[12].Visible = false;
//DetailsViewRow row = DetailsView1.Rows[12];
//row.visible = false;
}这是我的aspx
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="ObjectDataSource2">
...
<asp:TemplateField HeaderText="Item"
SortExpression="Item">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Item") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Item") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Item") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
...发布于 2013-12-31 21:00:49
您必须使用Fields集合的DetailsView。您的方法应该如下所示:
protected void SomeMethod(object sender, EventArgs e)
{
DetailsView1.Fields[12].Visible= false;
}要测试create,向页面添加一个DetailsView,添加一个按钮:
<asp:DetailsView ID="DetailsView1" AutoGenerateRows="false" runat="server" Height="50px" Width="125px">
<Fields>
<asp:TemplateField HeaderText="Id" SortExpression="Id">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Category" SortExpression="Category">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Category") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Category") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Category") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
<br />
<asp:Button ID="btnHide" runat="server" Text="Hide" OnClick="SomeMethod" />并在后面的代码中添加以下代码:
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DetailsView1.DataSource = GetProduct();
DetailsView1.DataBind();
}
}
private List<Product> GetProduct()
{
return new List<Product>()
{
new Product{Id=1, Name="Paper", Category="Stationery"},
new Product{Id=2, Name="Pen", Category="Stationery"},
new Product{Id=3, Name="Pencil", Category="Stationery"}
};
}
protected void SomeMethod(object sender, EventArgs e)
{
DetailsView1.Fields[0].Visible = false;
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
}结果是:

https://stackoverflow.com/questions/20860058
复制相似问题