【问题标题】:Set User Controls Objects Properties inside a GridView ASP.NET在 GridView ASP.NET 中设置用户控件对象属性
【发布时间】:2015-07-31 13:13:34
【问题描述】:

我在我的 gridview 中插入了三个模板列。在每一列中,我插入一个用户控件。例如,在第一列中有一个用户控件,其中包含一个图像和三个标签。

在我的页面加载中,我需要获取文件夹中的图像列表并为每个图像创建一行。然后我需要在 gridview 列中更新那些用户控件的图像。

这是获取图像列表并将作为 GridView 的数据源的示例代码:

        string[] filePaths = Directory.GetFiles(Server.MapPath("~/Resources/Pictures"));
        GridView1.DataSource = filePaths;
        GridView1.DataBind();

在这一步中,我可以看到 4 行填充了 RAW 用户控件(图像控件中的空图像、标签的默认文本等)现在我需要用我自己的属性更新它们。

这是我输出的图片:

正如您在第一列中看到的,有一些控件(图像和标签)用于用户控件,我在 gridview 的列模板中使用它们。但它们是原始的,我需要更新它们。例如,我需要使用您在第三列中看到的链接更新图像。

这是我的 GridView 代码的一部分:

<asp:GridView ID="GridView1" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" Caption="Image List" CellPadding="2" ForeColor="Black" GridLines="None" Height="222px" Width="409px">
    <AlternatingRowStyle BackColor="PaleGoldenrod" />
    <Columns>
        <asp:TemplateField HeaderText="Old Picture">
            <ItemTemplate>
                <uc1:ImageColumn ID="ImageColumn1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="New Picture">
            <ItemTemplate>
                <uc2:ReplaceColumn ID="ReplaceColumn1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Allow Access">
            <ItemTemplate>
                <asp:Image ID="Image1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

希望它足够清楚。有人可以帮忙吗?

【问题讨论】:

  • 您能否也发布您的 GridView 的标记(*.aspx 的一部分)?

标签: c# asp.net gridview user-controls


【解决方案1】:

您必须将公共属性添加到您的用户控件,然后使用“普通”数据绑定表达式进行设置。例如:

用户控制:

public class MyUserControl : UserControl
{
    public string ImageName {get; set;}
}

网格的模板列:

<asp:TemplateField ...>
    <ItemTemplate>
        <uc1:MyUserControl runat="server" ImageName='<%# Eval("ImageUrl")%>' ... />

代码隐藏:

public class ImageVM { // view-model for data-binding
    public string ImageUrl { get; set; }
}

...

var images = LoadImages(); // returns a list of ImageVM instances
grid.DataSource = images;
grid.DataBind();

【讨论】:

  • 我没有得到你的代码 :( 我是 ASP 新手,我用一些代码和图片编辑了我的第一篇文章,所以我希望现在更清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
相关资源
最近更新 更多