Member 13011316 Ответов: 0

Массовое редактирование обновление нескольких строк в ASP.NET gridview с помощью флажков


В приведенной ниже HTML разметке у меня есть простая ASP.Net GridView с 3 столбцами.

Первый столбец содержит флажок, второй столбец содержит метку для отображения идентификатора и пути доступа к папке соответственно и третий столбец содержит метку и выпадающий список для отображения и редактирования статуса папки соответственно.

Здесь я использую GridView с подкачкой для отображения данных, и эти данные составляют около миллионов строк. Когда я нажимаю на кнопку Отправить, чтобы обновить флажок выбранные строки, время выполнения занимает слишком много времени для обновления строк в таблице.

Например: для 5000 строк = 26 мин.
Может ли кто-нибудь помочь мне решить эту проблему и сократить время выполнения, чтобы обновить все записи в течение нескольких секунд.

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

Пожалуйста, смотрите код:

введите код здесь
&ЛТ;в ASP:GridView в идентификатор="gvACLReport" атрибут runat="сервер" AutoGenerateColumns="false" - в CssClass="менеджера mgrid" EmptyDataText="записи не существует..." DataKeyNames="ACLId" ShowFooter="истинный" HorizontalAlign="центр" ширина="100%" AllowPaging="true" в EnableSortingAndPagingCallback="истинный" pagesize для="500" AllowSorting="правда" видна="ложных" onpageindexchanging="gvACLReport_PageIndexChanging" EnableSortingAndPagingCallbacks="правда"и GT;
<AlternatingRowStyle CssClass="mgridalt" />
<PagerSettings PageButtonCount="10000" />
<PagerStyle CssClass="gridview" HorizontalAlign="Center">
<колонки>
<asp:templatefield>
<headertemplate>
&ЛТ;АСП:чекбокс с ID="chkAllACLReport" атрибут runat="сервер" autopostback элемента управления="истинный" OnCheckedChanged="OnCheckedChanged" /&ГТ;

<itemtemplate>
&ЛТ;АСП:чекбокс с ID="chkACLReport" атрибут runat="сервер" autopostback элемента управления="истинный" OnCheckedChanged="OnCheckedChanged"/&ГТ;

<ItemStyle Width="20px" />


<asp:TemplateField HeaderText="ACL Id">
<itemtemplate>
&ЛТ;АСП:метка идентификатор="lblACLId" атрибут runat="сервер" текст=в'<%# Ивала("ACLId") %&ГТ; в'>

<ItemStyle Width="20px" />


<asp:TemplateField HeaderText="путь доступа">
<itemtemplate>
&ЛТ;АСП:текстовое поле с ID="lblAccessPathACL" атрибут runat="сервер" строк="3" ширина="400 пикселей" текст=в'<%# Ивала("AccessPath") %&ГТ;'только для чтения="истинный" текстовую="многострочный" для свойства borderstyle="нет" BorderWidth="0px" фона="прозрачный"и GT;

<ItemStyle Width="150px" />


<asp:TemplateField HeaderText="имя каталога">
<itemtemplate>
&ЛТ;АСП:текстовое поле с ID="lblDirectoryName" атрибут runat="сервер" строк="3" ширина="400 пикселей" текст=в'<%# Ивала("каталог название") %&ГТ;'только для чтения="истинный" текстовую="многострочный" для свойства borderstyle="нет" BorderWidth="0px" фона="прозрачный"и GT;

<ItemStyle Width="150px" />



<asp:TemplateField HeaderText="группа пользователей">
<itemtemplate>
&ЛТ;АСП:метка идентификатор="lblUserGroup" атрибут runat="сервер" текст=в'<%# Ивала("Асэргрупп") %&ГТ; в'>

<ItemStyle Width="150px" />


<HeaderStyle CssClass="mgridheader" />
<RowStyle CssClass="mgriditem" />


//Пожалуйста, проверьте это таблица содержит выпадающий список для обновления статуса и кнопку Отправить и очистить


Статус:
&ЛТ;как ASP:dropdownlist с ИД="ddlChangeStatus" autopostback элемента управления="истинный" AppendDataBoundItems="истинный"
атрибут runat="сервер" ширина="200 пикселей" свойстве datasourceid="SDSChangeStatus" DataTextField="статус"
DataValueField="StatusId">
<asp:ListItem Text="--Select--" Value="0">

&ЛТ;как ASP:sqldatasource его идентификатор="SDSChangeStatus" атрибут runat="сервер" параметр connectionString="&ЛТ;%$ connectionstrings в:gtsgeneralconn %&ГТ;"
SelectCommand="VT_getStatusList" SelectCommandType="StoredProcedure">
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="ddlChangeStatus"
Дисплей="динамической" сообщение об ошибке="выбрать статус" InitialValue="0" SetFocusOnError="правда"и GT;*
&ЛТ;АСП:кнопка ID="btnChangeStatus" атрибут runat="сервер" текст="отправить" CausesValidation="ложных"
onclick="btnChangeStatus_Click"
/>
<asp:Button ID="btnChangeClear" runat="server" Text="Clear"
CausesValidation="False" onclick="btnChangeClear_Click"
/>


с фоновым кодом:

охраняемых недействительными ChangeStatusGlobalSensitiveNonSensitivereport()
{
int rowsAffected = 0;
foreach (строка GridViewRow в gvGlobalSensitive.Rows)
{
если (строки.RowType == DataControlRowType.Строкаданных)
{
bool значение этот флажок установлен = ряд.Ячейки[0].Элементы Управления.OfType<CheckBox().FirstOrDefault().Проверен;
если (не этот флажок установлен)
{
using (SqlConnection con = new SqlConnection(cs))
{
cmd = new SqlCommand("VT_ACLReportChangeStatus", con);
УМК.Свойство Commandtype = Система.Данных.Командный тип.Хранимая процедура;
УМК.CommandTimeout = 3600;
cmd.параметры.AddWithValue("@ChangeStatus", ddlChangeStatus.SelectedItem.Text.Метод toString());
cmd.параметры.AddWithValue("@ACLId", строка.Клетки[1].Управления.Метод oftype().Метода firstordefault().Текст);
против.Открыть();
УМК.Метод executenonquery();
против.Закрывать();
rowsAffected++;
}
}
}
lblUpdatedRowsMsg.Text = rowsAffected + " строки обновлены!!";
lblUpdateMsg.Text = "Деталь Успешно Сохранена!!";
gvGlobalSensitive.Видна = ложь;
tableChangeStatus.Видна = ложь;
divReport.Видна = ложь;
}
if (rowsAffected == 0)
{
lblUpdateMsg.Текст = "пожалуйста, установите флажок, чтобы обновить статус!!";
lblUpdatedRowsMsg.Text = rowsAffected + " строки обновлены!!";
}
}

// Пожалуйста, проверьте хранимую процедуру:
Изменить процедуру [dbo].[VT_ACLReportChangeStatus]
(
@ChangeStatus nvarchar(50)=null,
@ACLId int
)
АС
// Exec VT_ACLReportChangeStatus 'Complete',34
НАЧАТЬ
UPDATE VT_ACLReport SET Status = @ChangeStatus WHERE ACLId = @ACLId
Конец

F-ES Sitecore

Это всегда будет медленно. Используйте подкачку, чтобы обеспечить одновременное отображение пользователю только 10 или 20 записей. Если вам нужно обновить много записей одновременно, то предоставьте какой-нибудь другой метод для этого, а не показывать все данные в gridview.

0 Ответов