在用户控件内的转发器内访问控件

时间:2011-08-04 12:05:56

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

我的代码中有一个属性,它在作为转发器的usercontrol中发回信息。 rptOwners是我正在使用的转发器。转发器内的信息必须手动解析为xml,并通过代码中的属性发回。问题是我似乎无法访问转发器内控件的值。

调试时,我能看到rptOwners.DataSource中有2个项目,rptOwners.Items.Count = 2.我可以在监视窗口看到我想要的信息在那里但是我无法访问它。

我一直在尝试使用rptOwners.DataSource [0] .Name等,但它说“无法将索引应用于对象类型的表达式。

public string xmlString
{
    get
    {
        var _builder = new StringBuilder();

        var rpt = rptOwners.DataSource;
        IList<string> ownersRepeater = new List<string>();

        foreach (var item in rpt )
        {
            _builder.Append("<Owners>");
            _builder.Append("<Owner>");
            _builder.Append(String.Format("<item>{0}</item>", name));
            _builder.Append(String.Format("<item>{0}</item>", address));
            _builder.Append(String.Format("<item>{0}</item>", age));
            _builder.Append("</Owner>");
            _builder.Append("</Owners>");
        }
        return _builder.ToString();
    }

感谢您的帮助。如果这还不够明确,请告诉我。

以下是我的意思......

enter image description here

以下是答案:

foreach (RepeaterItem item in rptOwners.Items)
        {
            var lblOwnerName = (Label)item.FindControl("lblOwnerName");


            _builder.Append("<Owners>");
            _builder.Append("<Owner>");
            _builder.Append(String.Format("<item>{0}</item>", lblOwnerName));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append(String.Format("<item>{0}</item>", item));
            _builder.Append("</Owner>");
            _builder.Append("</Owners>");


        }
        return _builder.ToString();

3 个答案:

答案 0 :(得分:1)

试试这个(我只添加了一个演员):

public string xmlString
{
get
{
    var _builder = new StringBuilder();

    var rpt = (IList<Owner>) rptOwners.DataSource; //ADDED A CAST
    IList<string> ownersRepeater = new List<string>();

    foreach (var item in rpt )
    {
        _builder.Append("<Owners>");
        _builder.Append("<Owner>");
        _builder.Append(String.Format("<item>{0}</item>", name));
        _builder.Append(String.Format("<item>{0}</item>", address));
        _builder.Append(String.Format("<item>{0}</item>", age));
        _builder.Append("</Owner>");
        _builder.Append("</Owners>");
    }
    return _builder.ToString();
}

答案 1 :(得分:0)

我不知道您的DataSource属性是如何实现的,但是根据您的描述似乎正在改变

var rpt = rptOwners.DataSource;

行到

var rpt = rptOwners.Items;

应该有用。

答案 2 :(得分:0)

我建议你不要在任何地方使用'var'。如果不清楚表达正确部分的类型是什么,最好显示确切的类型。

您不能仅因为Repeater.DataSource属性类型为System.Object而应用索引器。你必须将其转换为适当的一个才能访问索引器(List?)。