Есть две таблицы — роли и отчеты. Каждой роли назначена своя группа отчетов. Мне нужно сделать следующим образом — когда я жму Edit у роли, мне в EditTemplate должна выдаваться таблица с отчетами, и против каждого отчета должна стоять/не стоять галочка. Собственно проблемы две:
1. Как добавить GridView в EditTemplate, это понятно. Но как сделать так, чтобы чекбоксы (поле Permitted) были заполнены соответствующими значениями, и чтобы я мог чекать/анчекать каждый, не переводя каждую строку в режим Edit?
2. После того, как я отметил все чекбоксы, как мне записать в базу все значения из грида? Что-то мне говорит, что нужен перебор строк грида? Или есть способ покрасивее?
По идее можно отметить отчеты и на отдельной странице, без EditTemplate, но все равно остаются оба вопроса — возможность чекать чекбоксы по всему гриду и необходимость записать все данные в БД после редактирования.
Здравствуйте, Махмуд, Вы писали:
М>1. Как добавить GridView в EditTemplate, это понятно. Но как сделать так, чтобы чекбоксы (поле Permitted) были заполнены соответствующими значениями, и чтобы я мог чекать/анчекать каждый, не переводя каждую строку в режим Edit?
Угу, это понятно, большое спасибо.
Собственно, еще вопрос, вдогонку — поскольку этот грид находится в EditTemplate родительского грида, есть какие-нибудь события типа "начала редактирования" или "окончания редактирования" родительского грида, по которому я мог бы начать заполнять дочерний грид или начать его писать в базу?
Здравствуйте, Махмуд, Вы писали:
М>Собственно, еще вопрос, вдогонку — поскольку этот грид находится в EditTemplate родительского грида, есть какие-нибудь события типа "начала редактирования" или "окончания редактирования" родительского грида, по которому я мог бы начать заполнять дочерний грид или начать его писать в базу?
дочерний грид я бы заполнял тоже по событию DataBinding
а так конечно в гридвью события есть — RowEditing, RowUpdating, RowCancelingEditing...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Удар судьбы в лоб означает, что не возымели действия ее пинки под зад
M>foreach ( GridViewRow row in GridView1.Rows )
M>{
M>}
M>
Хм... Это значит, что в гриде должны присутствовать все поля. Если мне надо сделать такое вот:
update Reports set Permitted = @Permitted where ReportID = @ReportID
а у меня в строке грида есть только название отчета и чекбокс, то я, по идее, не получу этот самый ReportID, потому как его нету в Rows. Что тогда делать?
Здравствуйте, Махмуд, Вы писали:
М>Хм... Это значит, что в гриде должны присутствовать все поля.
не означает
ключевое поле должно присутствовать в датасете, а в гриде не обязательно
у GridViewRow есть сво-во DataItem, которое является DataRowView — оттуда и бери значение ключевого поля
вообще это все видно из моего кода ниже
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Удар судьбы в лоб означает, что не возымели действия ее пинки под зад
Здравствуйте, Dronopotamus, Вы писали:
D>ключевое поле должно присутствовать в датасете, а в гриде не обязательно D>у GridViewRow есть сво-во DataItem, которое является DataRowView — оттуда и бери значение ключевого поля
Вот что у меня работает на OnButtonClick
foreach (GridViewRow row in GridView1.Rows)
{
DataRowView rowView = (DataRowView)row.DataItem;
int Permitted = rowView["Permitted"];
...
}
Здравствуйте, Махмуд, Вы писали:
М>Ну так вот, row.DataItem у меня почему-то null.
ну вопервых GridViewRow бывают разные, нам нужны только те, у которых
e.Row.RowType == DataControlRowType.DataRow;
во вторых тут есть бага сам тока нашел
читаем мcдн, св-во GridViewRow.DataItem
Use the DataItem property to access the properties of the underlying data object to which the GridViewRow object is bound. The DataItem property is only available during and after the RowDataBound event of a GridView control.
смотрим код рефлетором
метод GridView.CreateRow
if (dataBind)
{
row1.DataBind();
this.OnRowDataBound(args1);
row1.DataItem = null;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Удар судьбы в лоб означает, что не возымели действия ее пинки под зад
Re: Перебор данных по строкам GridView
От:
Аноним
Дата:
07.11.06 16:32
Оценка:
наверное поздновато, но... как вариант
это можно сделать путем добавления ItemTemplate в шаблон поля
( а не только EditItemTemplate )
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkBox" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="chkBox" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
доступ к значению CheckBox`а всегда можно получить так: