Страница: 1 |
Страница: 1 |
Вопрос: Обращение к полям DetailsView
Добавлено: 13.05.11 23:21
Автор вопроса: The_Immortal
Ребят, а не подскажите еще через пожалуйста как сделать так, чтобы в поле при редактировании какой-либо записи из GridView (через DetailsView), был выбор значений уже заранее заполненный?
Т.е. у меня имеется таблица1:
Имя_препод. Предмет.
Иванов Матем-ка
Сидоров Информатика
Иванов ПЯВУ
И еще одна таблица2:
Имя_препод. Предмет. Поле3 Поле4
*список зачений *список
из табл.1
Т.е. необходимо, чтобы значения колонок "Имя_преп." и "Предмет" автоматически попадали в таблицу2 из табл. 1. Причем преподаватель соответствовал предмету: Выбираю "Иванов", в колонке Предмет: Информатика, ПЯВУ.
Вообще не понимаю как программировать там (в файле *aspx.cs) :( Приходится работать непосредственно в файле *.aspx, что очень накладно... Скучаю очень по C++ билдеру - там как рыба...
Вот что сделал:
<asp:TemplateField HeaderText="ФИО преп.">
<ItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="SqlDataSource3" DataTextField="Prepod_name"
DataValueField="Prepod_name">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
Значения в DropDownList появляются, только вот при нажатии "Обновить запись" в DetailsView в БД пишется пустое значение. Вероятно, надо обращаться к этому полю в DetailsView из файла *aspx.cs по событию Updated/Inserted, но не знаю как...
Помогите, пожалуйста....
Ответы
Всего ответов: 2
Номер ответа: 1
Автор ответа:
The_Immortal
Вопросов: 3
Ответов: 7
Профиль | | #1
Добавлено: 14.05.11 13:41
Ребят, формализую вопрос:
не подскажите как программно можно записать значение из DropDownList в ячейку GridView (ну и соответственно в SqlDataSource - т.е. значение, выбранное из DropDownList, должно быть записано в саму БД).
Перерыл весь инет - так найти решения и не удалось... Пробовал вот такое, но не выбранное значение никуда не сохраняется...
Первый вариант:
protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
 ropDownList ddl = DetailsView1.FindControl("ropDownList1" as DropDownList;
SqlDataSource2.UpdateCommand = "UPDATE [table1] SET [Facult_name] = @Facult_name, [Prepod_name] ='" + ddl.SelectedValue + "' WHERE [FacultID] = @original_FacultID";
SqlDataSource2.Update();
GridView1.DataBind();
}
Второй вариант:
protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
 ropDownList ddl = DetailsView1.FindControl("ropDownList1" as DropDownList;
SqlDataSource2.UpdateParameters["Prepod_name"].DefaultValue = ddl.SelectedValue;
this.SqlDataSource2.Update();
GridView1.DataBind();
}
Помогите, пожалуйста... Это одна из основных функций, которые просто необходимо реализовать в моем дипломе... А его защита через несколько дней
Благодарю!
Номер ответа: 2
Автор ответа:
The_Immortal
Вопросов: 3
Ответов: 7
Профиль | | #2
Добавлено: 14.05.11 15:12
Да, еще важно отметить следующее:
Я использовал вот это руководство: http://msdn.microsoft.com/ru-ru/library/ms178294(v=vs.90).aspx
Дело в том, что у них там используется только одна таблица. У меня же ситуация следующая:
На странице имеется 3 SqlDataSource, GridView, DetailsView, DropDownList:
SqlDataSource1 содержит выборку из table1 и привязан к GridView1;
SqlDataSource2 также содержит выборку из table1 и привязан к DetailsView1;
а вот SqlDataSource3 содержит выборку из table2 и привязан к DropDownList1.
Так вот... Из-за того что я использую 2 разных таблицы (table1 и table2), я не могу использовать привязку (Bind).
То есть если использовать вот такой код:
То получаю след. ошибку:
'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value
А если написать без SelectedValue='<%# Bind("Prepod_name" %>':
то в DetailsView (в DropDownList1) списком выводятся значения из table2.
Но теперь при выборе какого-либо из этих значений, мне необходимо сохранить его в БД (GridView/SqlDataSource) - а вот как это сделать почему-то никто не знает, хотя задача на самом деле банальная: DropDownList получает значения из другой таблицы...