【问题标题】:Hide DetailsView TemplateField from CodeBehind从 CodeBehind 隐藏详细信息查看 TemplateField
【发布时间】:2014-01-18 13:11:44
【问题描述】:

我正在尝试有条件地从后面的代码中隐藏 DetailsView 行。我希望能够根据某些条件调用 SomeMethod 并让它隐藏第 12 行。有谁知道我该怎么做?

我已使用调试器确认 Row[12] 是正确的行并且正在执行该方法。

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

【问题讨论】:

    标签: asp.net webforms code-behind detailsview


    【解决方案1】:

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

    protected void SomeMethod(object sender, EventArgs e)
    {
        DetailsView1.Fields[12].Visible= false;
    }
    

    要测试创建添加一个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; }
    }
    

    结果如下:

    【讨论】:

    • 这非常有效。就这么简单。我有一个真正的办公桌时刻。谢谢。
    • 是的,很简单。很高兴它有帮助:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多