Tampilan Formulir Asp.net dengan tampilan kisi di dalam contoh kerja Edit/SisipkanTemplate

Saya menggunakan FormView untuk mengedit objek bisnis saya. Saya tidak punya masalah untuk mengedit/memasukkan properti tunggal.

Beberapa objek bisnis memiliki properti koleksi yang ingin saya edit/sisipkan dengan cara yang sama seperti yang saya lakukan untuk properti tunggal: Text='<%# Bind("SinglePropertyName") %>'.

Jadi saya ingin menyertakan tampilan kisi di dalam templat edit/sisipkan dan ikat (dua arah) Sumber Data ke properti koleksi: Datasource='<%# Bind("CollectionPropertyName") %>'. Lalu saya ingin dapat mengedit item properti koleksi dengan tampilan kisi itu sendiri dan mendapatkan nilai yang diubah di antara perubahan properti sigle lainnya.

Ini berfungsi dengan baik untuk menampilkan templat, koleksinya dirender ke tampilan kisi. Masalahnya adalah mendapatkan perubahannya.

Saya sudah mencoba melakukannya tanpa hasil, saya mendapatkan pengecualian berikut ketika mencoba Mengikat Data pada tampilan kisi: Metode penyatuan data seperti Eval(), XPath(), dan Bind() hanya dapat digunakan dalam konteks kontrol terikat data.

Selain itu, Nilai Baru FormView untuk CollectionProperty dari acara ItemUpdating selalu menghasilkan nol.

Jadi saya ingin melihat contoh skenario serupa untuk melihat apakah saya mampu melakukannya atau apakah saya perlu menggunakan pendekatan yang berbeda.

Terima kasih!


person machocr    schedule 20.10.2011    source sumber


Jawaban (1)


Saya sudah menemukan solusi untuk ini dan itu adalah dengan merangkum tampilan grid dalam kontrol pengguna (ObjectList) yang memperlihatkan properti Value untuk diikat.

<uc:ObjectList ID="ucObjectList" runat="server" Value='<%#Bind("Items") %>' />

ObjectList.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ObjectList.ascx.cs" Inherits="TestBinding.ObjectList" %>

    <asp:GridView runat="server" ID="grdItems" DataSource='<%#Datasource%>' 
    OnRowEditing="grdItems_RowEditing" 
    OnRowCancelingEdit="grdItems_RowCancelingEdit" 
    OnRowUpdating="grdItems_OnRowUpdating">
    <Columns>
    <asp:CommandField ShowEditButton="True"></asp:CommandField>
    </Columns>
    </asp:GridView>

ObjectList.ascx.cs:



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Web.UI.WebControls;

    namespace TestBinding
    {
        public partial class ObjectList : UserControl
        {
            protected List Datasource
            {
                get
                {
                    if (ViewState["ObjectList"] == null) ViewState["ObjectList"] = new Test();
                    return (List)ViewState["ObjectList"];
                }
                set { ViewState["ObjectList"] = value; }
            }

            [Bindable(true, BindingDirection.TwoWay)]
            public List Value
            {
                get { return Datasource; }

                set { Datasource = value; }
            }

            protected void Page_Load(object sender, EventArgs e)
            {

            }

            protected void grdItems_RowEditing(object sender, GridViewEditEventArgs e)
            {
                ((GridView)sender).EditIndex = e.NewEditIndex;
                ((GridView)sender).DataSource = Datasource;
                ((GridView)sender).DataBind();
            }

            protected void grdItems_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
            {
                ((GridView)sender).EditIndex = -1;
                ((GridView)sender).DataSource = Datasource;
                ((GridView)sender).DataBind();
            }

            protected void grdItems_OnRowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                Datasource[e.RowIndex].ID = int.Parse(e.NewValues["ID"].ToString());
                Datasource[e.RowIndex].Last = (string)e.NewValues["Last"];
                ((GridView)sender).EditIndex = -1;
                ((GridView)sender).DataSource = Datasource;
                ((GridView)sender).DataBind();
            }
        }
    }

Saya harap ini membantu Anda jika Anda menghadapi hal seperti itu.

person machocr    schedule 22.10.2011