2

これが私のリピーターのaspxです:

<asp:Repeater ID="rpt_Files" runat="server">
    <HeaderTemplate>
       <th><asp:Label runat="server" ID="lbl_FileNameHeader" Text="File Name" /></th>                       
    </HeaderTemplate>
    <ItemTemplate>            
           <asp:Label runat="server" ID="lbl_FileName" Text='<%# Eval("JobFileNames")  %>' />
    </ItemTemplate>       
</asp:Repeater>

C# でデータをバインドするコードは次のとおりです。

rpt_Files.DataSource = CurrentQuote;
    rpt_Files.DataBind();

そして、CurrentQuote のクラス定義は次のとおりです。

public class CurrentQuote
{
// Properties
private List<string> _jobfilenames;
public List<string> JobFileNames
{
    get
    {
        if (_jobfilenames != null)
            return _jobfilenames;
        else
        {
            _jobfilenames = new List<string>();
            return _jobfilenames;
        }
    }

    set { _jobfilenames = value; }
}

これが私が受け取るエラーです:

An invalid data source is being used for rpt_Files. A valid data source must implement either IListSource or IEnumerable.

リピーター データソースを CurrentQuote.JobFileNames に変更すると、文字列に "JobFileNames" というプロパティがないというエラーが表示されます。

4

2 に答える 2

5

複数のファイルを含む 1 つの見積もりがある場合、DataSource は次のようになります。

CurrentQuote cq = new CurrentQuote();
string[] filenames = new string[] { "file1", "file2", "file3" };
cq.JobFileNames = filenames.ToList();

rpt_Files.DataSource = cq.JobFileNames;
rpt_Files.DataBind();

次に、マークアップで次を使用できます。

<asp:Label runat="server" ID="lbl_FileName" Text='<%# Container.DataItem %>' />

そうです、「asp.netリピーターのデータソースをクラスのプロパティであるリストにすることは可能です」が、最初にクラスをインスタンス化し、マークアップからDataItemが文字列であるため直接アクセスする必要があります。

于 2012-05-18T08:23:16.050 に答える
1

次のように、DataSource をオブジェクトのリストに割り当てる必要があります。

List<CurrentQuote> myCurrentQuoteList = new List<CurrentQuote>();
CurrentQuote  currentQuoteObj = new CurrentQuote();  
currentQuoteObj.JobFileNames.Add("test");
myCurrentQuoteList.Add(myCurrentQuoteList );  

rpt_Files.DataSource = myCurrentQuoteList;
rpt_Files.DataBind();

クラス オブジェクトを直接割り当てることはできません。データ ソースとして使用する IListSource または IEnumerable を実装する必要があります。

于 2012-05-18T06:35:59.587 に答える