0

私の問題は、タイトルが言うよりも少し複雑です:

データベースのデータを別のユーザー コントロール (GridView と呼びます) に編集するためのユーザー コントロール (エディターと呼びます) を作成しました。

エディターは、グリッドビュー内の各行に使用されます (行はユーザーコントロールでもあり、エディターは挿入の場合でも行内のみです)。完全に機能しますが、挿入に使用しようとすると機能しません。

挿入と編集の唯一の違いは、次のフィールドです。

    #region Field
    /// <summary>
    /// 
    /// </summary>
    //public Field Field { get { return DataItem as Field; } }
    private Field _field;
    [Bindable(true)]
    public Field Field
    {
        get
        {
            if (IsInsert && _field == null)
            {
                _field = SubscriptionController.CreateField();
            }
            return _field;
        }
        set { _field = value; }
    }
    #endregion

このフィールド内には、リピーターにバインドするコレクションがあり、SubscriptionController.CreateField();メソッドはフィールド クラスのインスタンスを作成するだけで、ここにあるすべてのコレクションはコードです。

    public Field CreateField()
    {
        Field field = new Field();
        field.Type = GetFieldTypes().First();
        field.Label = new LocalizedStringCollection();
        field.Values = new FieldValueCollection();
        field.Selections = new FieldSelectionCollection();
        foreach (Models.TrainingGroup trainingGroup in GetTrainingGroup())
        {
            foreach (Models.Division division in GetDivisions())
            {
                foreach (Models.ProfilStatusGroup profilStatusGroup in GetProfilStatusGroup())
                {
                    field.Selections.Add(new Models.FieldSelection() { Selected = false, DivisionId = division.Id, ProfilStatusGroupId = profilStatusGroup.Id, TrainingGroupId = trainingGroup.Id });
                }
            }
        }
    }

バインドしたコレクションは viewstate に保存されます:

    #region FieldValues
    /// <summary>
    /// Get/Set FieldValues from Viewstate
    /// </summary>
    public FieldValueCollection FieldValues
    {
        get
        {
            if (ViewState["FieldValues"] == null)
            {
                if (Field != null && Field.Values != null)
                    ViewState.Add("FieldValues", Field.Values);
                else
                    ViewState.Add("FieldValues", new FieldValueCollection());
            }
            if (ViewState["FieldValues"] != null)
            {
                return (FieldValueCollection)ViewState["FieldValues"];
            }
            return null;
        }
        set
        {
            if (ViewState["FieldValues"] == null)
            {
                ViewState.Add("FieldValues", value);
            }
            else
            {
                ViewState["FieldValues"] = value;
            }

        }
    }
    #endregion

しかし、ポストバックすると、リピーター内のすべてのテキストボックスが空になります。

4

0 に答える 0