首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐藏DetailsView TemplateField不受CodeBehind影响

隐藏DetailsView TemplateField不受CodeBehind影响
EN

Stack Overflow用户
提问于 2013-12-31 16:11:07
回答 1查看 6.6K关注 0票数 3

我试图从后面的代码中有条件地隐藏DetailsView行。我希望能够基于某种条件调用SomeMethod,并让它隐藏第12行。有人知道我如何才能做到这一点吗?

我已经使用调试器来确认Row12是正确的行,并且正在执行该方法。

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 21:00:49

您必须使用Fields集合的DetailsView。您的方法应该如下所示:

代码语言:javascript
复制
protected void SomeMethod(object sender, EventArgs e)
{
    DetailsView1.Fields[12].Visible= false;
}

要测试create,向页面添加一个DetailsView,添加一个按钮:

代码语言:javascript
复制
<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" />

并在后面的代码中添加以下代码:

代码语言:javascript
复制
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; }
}

结果是:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20860058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档