Member 12085957 Ответов: 1

Режим редактирования в ASP.NET gridview при нажатии клавиши enter.


Когда я нажимаю клавишу Enter на строке, которая находится в editmode в gridview, она должна сохраниться, и она должна перейти к следующей строке, и эта строка должна отображаться в editmode.Обновлять данные проще простого.Пожалуйста, помогите мне

Что я уже пробовал:

охраняемых недействительными gv_RowEditing(объект отправителя, GridViewEditEventArgs е)
{

int rowNum = e. NewEditIndex;
GridViewRow подряд = гв.Строк[Конвертирования.ToInt32(e. CommandArgument)];
гв.EditIndex = Конвертировать.ToInt32 (строка);
DataTable dt = (DataTable)Session["dt"];
гв.Источник данных = ДТ;
гв.Привязку();
}

Richard Deeming

Репост
Вы уже опубликовали этот вопрос:
https://www.codeproject.com/Questions/1170114/Asp-net-gridview-editmode-on-press-of-ENTER-key[^]

1 Ответов

Рейтинг:
11

njammy

Вот решение с использованием только кода begind и никакого JavaScript:

1. Чтобы добиться этого, используйте в формы.собственность умолчанию.
2. Убедитесь,что элементы управления редактированием, например текстовые поля, определены вручную в полях шаблонов с набором свойств Id.
3. убедитесь, что кнопки Edit, Update также определены вручную внутри полей TemplateFields с установленными идентификаторами, именно так кнопка enter позволит вам обновить и перейти к следующей строке.
4. SetFocus () - адаптируйте это к вашим собственным требованиям, чтобы помочь пользователю работать.

Разметка:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EnterKeyEditGrid.aspx.cs" Inherits="WebFormsGridViewCommand.EnterKeyEditGrid" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView runat="server" ID="gv1"
                AutoGenerateColumns="false"
                OnRowEditing="gv1_RowEditing"
                OnRowCancelingEdit="gv1_RowCancelingEdit"
                OnRowUpdating="gv1_RowUpdating">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <%#Eval("Item") %>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox runat="server" ID="ItemTextBox" Text='<%#Eval("Item") %>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField HeaderText="Price" DataField="Price" DataFormatString="{0:c}" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button runat="server" ID="editButton" Text="Edit" CommandName="edit" />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:Button runat="server" ID="updateButton" Text="Update" CommandName="update" ClientIDMode="AutoID" />
                            <asp:Button runat="server" ID="cancelButton" Text="Cancel" CommandName="cancel" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>


Код:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebFormsGridViewCommand
{
    public partial class EnterKeyEditGrid : System.Web.UI.Page
    {
        private const string SESSION_GV_DATA = "Data";
        private DataTable _Data
        {
            get
            {
                if (Session[SESSION_GV_DATA] == null)
                {
                    Session[SESSION_GV_DATA] = GetData();
                }
                return (DataTable)Session[SESSION_GV_DATA];
            }
            set { Session[SESSION_GV_DATA] = value; }
        }

        public void SetUpdateButtonId()
        {
            if (gv1.EditIndex != -1)
            {
                Button updateButton = (Button)gv1.Rows[gv1.EditIndex].FindControl("UpdateButton");
                if (updateButton != null)
                {
                    Form.DefaultButton = updateButton.UniqueID;
                }
            }
            else
            {
                Form.DefaultButton = null;
            }
        }

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

        protected void LoadGridView()
        {
            _Data = GetData();

            gv1.DataSource = _Data;
            gv1.DataBind();
        }

        private DataTable GetData()
        {
            DataTable dt = new DataTable("data1");
            dt.Columns.AddRange(
                new DataColumn[]
                {
                    new DataColumn("Item",typeof(string)),
                    new DataColumn("Price", typeof(decimal))
                });
            List<object[]> dataItems = new List<object[]>
            {
                new object[] { "Apple", 0.30m },
                new object[] { "Orange", 0.20m },
                new object[] { "Pear", 0.40m }
            };

            dataItems.ForEach(x => dt.Rows.Add(x));

            return dt;
        }

        protected void gv1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gv1.EditIndex = e.NewEditIndex;
            LoadGridView();
            SetFocus();
        }

        protected void gv1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gv1.EditIndex = -1;
            LoadGridView();
        }

        protected void gv1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            // Implement your data update code here...

            SetEditRow();
            LoadGridView();
            SetUpdateButtonId();
            SetFocus();
        }

        private void SetEditRow()
        {
            if (gv1.EditIndex == -1) return;

            if (gv1.EditIndex + 1 < gv1.Rows.Count)
            {
                if (gv1.Rows[gv1.EditIndex + 1].RowType == DataControlRowType.DataRow)
                {
                    gv1.EditIndex++;
                }
            }
            else
            {
                gv1.EditIndex = -1;
            }
        }

        private void SetFocus()
        {
            if (gv1.EditIndex == -1) return;
            gv1.Rows[gv1.EditIndex].Cells[0].FindControl("ItemTextBox").Focus();
        }
    }
}