Я работаю в Rails и работаю над проектом ASP.NET (не ASP MVC). Вопрос новичка: какой самый простой способ сделать специальный редактор для таблицы рекордов?
Например: у меня есть куча строк данных, и я хочу изменить поле «категория» для каждой - возможно, раскрывающийся список, может быть, ссылку, может быть, пользователь вводит его.
В Rails я бы перебирал строки для построения таблицы и имел бы форму для каждой строки. Форма будет иметь поле ввода или раскрывающийся список и отправлять данные в контроллер, например "/ item / edit / 15? Category = foo", где 15 - это itemID, а новая категория - "foo".
Я новичок в модели ASP.NET и не уверен в «правильном» способе сделать это - просто самый простой способ вернуть новые данные и сохранить их. Могу ли я сделать пользовательский элемент управления и добавить его в каждую строку? Любая помощь приветствуется.
Вы можете ДЕЙСТВИТЕЛЬНО обмануть в наши дни и взглянуть на новые Dynamic Data, которые поставляются с .NET 3.5 SP1. У Скотта Гатри есть запись в блоге, демонстрирующая, как быстро и легко она будет проходить здесь:
http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx
Не получив ТОГО ульта, я бы использовал генератор XSD для генерации строго типизированного DataSet, который совпадает с рассматриваемой таблицей. Это также создаст TableAdapter, который вы можете использовать для выполнения всех ваших операторов CRUD.
Оттуда свяжите его с DataGrid и используйте все стандартные шаблоны / события, связанные с этим, такие как EditIndex, SelectedIndex, RowEditing, RowUpdated и т. Д.
Я делал это с первых дней .NET, и этот вид функциональности становился все более и более упорядоченным с каждым обновлением 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 все делает в файле codebehind. На высоком уровне вы всегда можете перебрать GridView1.Items для получения каждой строки и item.findControl («ControlID») для запроса значения, хранящегося в каждом элементе, например, после нажатия кнопки «Обновить».