Лучший способ редактировать записи в ASP.NET?
-
08-06-2019 - |
Вопрос
Я имею опыт работы с Rails и работаю над проектом ASP.NET (не ASP MVC).Вопрос новичка:какой самый простой способ создать собственный редактор для таблицы записей?
Например:У меня есть несколько строк данных, и я хочу изменить поле «Категория» в каждой — может быть, раскрывающийся список, может быть, ссылку, может быть, пользователь вводит его.
В Rails я перебирал строки, чтобы построить таблицу, и имел форму для каждой строки.Форма будет иметь поле ввода или раскрывающийся список и отправлять данные контроллеру, например «/item/edit/15?category=foo», где 15 — это идентификатор элемента, а новая категория — «foo».
Я новичок в модели ASP.NET и не уверен в «правильном» способе сделать это — это самый простой способ вернуть новые данные и сохранить их.Могу ли я создать собственный элемент управления и добавить его в каждую строку?Любая помощь приветствуется.
Решение
Сегодня вы ДЕЙСТВИТЕЛЬНО можете схитрить и взглянуть на новые динамические данные, которые входят в состав .NET 3.5 SP1.У Скотта Гатри есть демонстрационная запись в блоге о том, как быстро и легко это пройдет для вас:
http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx
Не имея ЭТОГО передового опыта, я бы использовал генератор XSD для создания строго типизированного набора данных, который совпадает с рассматриваемой таблицей.Это также создаст адаптер таблицы, который вы можете использовать для выполнения всех ваших операторов CRUD.
Оттуда привяжите его к DataGrid и используйте все связанные с этим стандартные шаблоны/события, такие как EditIndex, SelectedIndex, RowEditing, RowUpdated и т. д.
Я занимаюсь этим с первых дней существования .NET версии 1.0, и с каждым обновлением Framework подобная функциональность становится все более и более оптимизированной.
РЕДАКТИРОВАТЬ:Я также хочу кратко отметить блог Мэтта Берсета.Я уже давно слежу за многими его вещами, и это здорово!
Другие советы
Есть несколько элементов управления, которые сделают это за вас, с разным уровнем сложности в зависимости от их относительной гибкости.
Традиционным способом сделать это является элемент управления DataGrid, который предоставляет макет таблицы.Если вам нужно что-то более гибкое по внешнему виду, элементы управления DataList и ListView также имеют встроенную поддержку редактирования, вставки или удаления полей.
Проверить Блог Мэтта Берсета несколько отличных примеров элементов управления asp.net в действии.
Спасибо за ответы, ребята.Похоже, что настройка DataGrid — это правильный путь.Для новичков в ASP.NET: вот что я делаю
<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Category">
<ItemTemplate>
<!-- in case we want to display an image -->
<asp:Literal ID="litImage" runat="server">
</asp:Literal>
<asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Это создает сетку данных.Затем мы можем связать его с источником данных (в моем случае DataTable) и использовать такие вещи, как
foreach (DataGridItem item in this.GridView1.Items)
{
DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
categoryListDropdown.Items.AddRange(listItems.ToArray());
}
для заполнения начального раскрывающегося списка в сетке данных.В этом случае вы также можете получить доступ к item.Cells[0].text, чтобы получить RuleID.
Заметки для себя:Модель ASP.NET выполняет все действия в файле кода программной части.На высоком уровне вы всегда можете перебирать GridView1.Items, чтобы получить каждую строку, и item.findControl("ControlID"), чтобы запросить значение, хранящееся в каждом элементе, например, после нажатия кнопки «Обновить».