2

Entity FrameworkASPX Webフォームで使用しています。私のGridView(GV)では、すべての列をItemTemplatesandで作成しEditTemplatesます。編集モードでは、新しい値を選択できますが、レコードは更新されません。GV には、そのフィールドの関連テーブルと一致する にDropDownList設定された があります。EntityDataSourceどのような手順が必要で、どのイベントを処理する必要がありますか? RowEditingイベントとイベントを試しましたRowUpdatingが、これまでのところ有用なコードはありません。悪いコードを見せてほしい場合は、お尋ねください。私も大歓迎です。これを配線するためのガイダンスが必要です。

4

1 に答える 1

0

3 つの列を持つ 1 つのテーブル Customers を持つ customerEntities という ADO.NET エンティティ データ モデルがあると仮定します。

  1. 顧客ID
  2. 名前

ASPX:

<asp:GridView ID="gvCustomers" runat="server" AutoGenerateEditButton="true" 
    AutoGenerateColumns="false" onrowcancelingedit="gvCustomers_RowCancelingEdit" 
    onrowediting="gvCustomers_RowEditing" onrowupdating="gvCustomers_RowUpdating" DataKeyNames="CustomerId">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="lblId" runat="server" Text='<%# Bind("CustomerId") %>' />
                <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>' />
                <asp:Label ID="lblSurname" runat="server" Text='<%# Bind("Surname") %>' />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Name") %>' />
                <asp:TextBox ID="txtSurname" runat="server" Text='<%# Bind("Surname") %>' />
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

コードビハインド:

  protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindCustomers();
        }

        private void BindCustomers()
        {
            customerEntities entityModel = new customerEntities();
            gvCustomers.DataSource = entityModel.Customers;
            gvCustomers.DataBind();
        }

        protected void gvCustomers_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvCustomers.EditIndex = e.NewEditIndex;
            BindCustomers();
        }

        protected void gvCustomers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvCustomers.EditIndex = -1;
            BindCustomers();
        }

        protected void gvCustomers_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            int customerId = (int)gvCustomers.DataKeys[e.RowIndex].Value;
            TextBox txtName = (TextBox)gvCustomers.Rows[e.RowIndex].FindControl("txtName");
            TextBox txtSurname = (TextBox)gvCustomers.Rows[e.RowIndex].FindControl("txtSurname");

            customerEntities entityModel = new customerEntities();
            Customer customer = entityModel.Customers.Where(c => c.CustomerId == customerId).First();
            customer.Name = txtName.Text;
            customer.Surname = txtSurname.Text;
            entityModel.SaveChanges();

            gvCustomers.EditIndex = -1;
            BindCustomers();
        }
于 2013-01-26T05:00:13.740 に答える