2011-08-04 136 views
-1

我的代碼中有一個屬性,它發回的是usercontrol中的一箇中繼器的信息。 rptOwners是我正在使用的中繼器。中繼器中的信息必須手動解析爲xml,並通過代碼中的屬性發回。問題是,我似乎無法訪問中繼器內控件的值。用戶控件內的中繼器內的訪問控制

調試時,我能看到,有2個項目我預計rptOwners.DataSource,而且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(); 
+0

你的意思是你不能訪問數據源?或者你的DataSource是一個對象數組,你試圖訪問它的元素? –

+0

我的數據源是類型爲Owner的對象數組。店主是每個店主的細節。業主類已被證明有效。訪問這些值發送給另一個班級是麻煩的。我的數據源是一個對象數組,我試圖訪問它的元素。 – joncodo

+0

顯示數據源屬性代碼。 – Reniuz

回答

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(); 
} 
+0

這不起作用。見圖片。 – joncodo

+0

您需要將其轉換爲準確的類型,如果其不是IList ,則需要將其轉換爲適當的類型。 –

0

我不知道你的DataSource屬性如何實現的,但是從你的描述似乎改變

var rpt = rptOwners.DataSource; 

var rpt = rptOwners.Items; 

應該工作。

+0

rptOwners.Items無法訪問我需要的信息。在編輯的文章中查看圖片。 – joncodo

+0

仍然不能理解DataSource是什麼類型。它是'公共對象[] DataSource'還是'公共對象DataSource'',請發佈代碼。開始調試並使用QuickWach查看您的DataSource是什麼類型。然後讓我們知道。 – Reniuz

0

我建議你不要在任何你想要的地方使用'var'。如果不明顯,表達正確部分的類型是什麼,最好展示確切類型。

只能因爲Repeater.DataSource屬性的類型爲System.Object而無法應用索引器。您必須將其轉換爲適當的一個才能訪問索引器(List?)。