リピーターのデータソースをリストに設定しています(MyProductsは単純なクラスであり、get / setterのみで構成されています)。
これとDataBind()の後、デバッグモードで各Repeater.ItemsのDataItemがnullであることがわかります。ポストバックを作成してMyProductsを更新しようとすると、Repeater.Items [n] .DataItemはまだnullであり、Imはそれをキャストできません。
リピーターをデータバインドするときに、各RepeaterItemにDataItemが設定されないのはなぜですか?私は理解できない/グーグルそれを理解する。私のコードの他のすべての側面は正しく機能します(たとえば、MyProductsからaspxにデータを出力します。
<asp:TextBox runat="server" id="q" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity")%>'></asp:TextBox>
その他のコード:
public class MyProducts
{
public string Number
{
get; set;
}
public decimal Price
{
get; set;
}
public decimal Quantity
{
get; set;
}
public decimal Total
{
get { return Quantity * Price; }
}
}
生成:
public List<MyProducts> TheProducts
{
get { // Invoking webservice, getting response as xml and converting it to a list of MyProducts }
}
私のユーザーコントロール:
// Bind products in cart
r.DataSource = TheProducts;
r.DataBind();
// Debugging "r.Items[n].DataItem" now shows "null", eventhough all objects has been correctly binded
デバッグ情報である#2を編集します。DataSourceは正しくロードされますが、Repeater.Items[3].DataItemはnullです。価値があるはずですよね? スクリーンショット
編集#3、私は今それを手に入れました、私はDataSourceが設定されているときDataItemは常にアクセス可能であり、完全なコードを含めることを考えていなかったと思いました(私はPage_Loadでそれにアクセスしようとしました)。
ユーザーが数量の値を編集した後、MyProductsの新しい数量を保存したいと思いました。MyProductsのIDを保持する隠しフィールドを配置することで解決しました。これにより、手動で検索して、そこからMyProductsオブジェクトを取得できます。
emremp、Mark Avenius、そして参加してくれた他のすべての人に感謝します。