Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
1

Обращение к полям DetailsView

14.05.2011, 13:43. Просмотров 4228. Ответов 10
Метки нет (Все метки)

Ребят, а не подскажите еще через пожалуйста как сделать так, чтобы в поле при редактировании какой-либо записи из GridView (через DetailsView), был выбор значений уже заранее заполненный?
Т.е. у меня имеется таблица1:

Имя_препод. Предмет.
Иванов Матем-ка
Сидоров Информатика
Иванов ПЯВУ

И еще одна таблица2:

Имя_препод. Предмет. Поле3 Поле4
*список знач. *список
из табл.1

Т.е. необходимо, чтобы значения колонок "Имя_преп." и "Предмет" автоматически попадали в таблицу2 из табл. 1. Причем преподаватель соответствовал предмету: Выбираю "Иванов", в колонке Предмет: Информатика, ПЯВУ.
Вообще не понимаю как программировать там (в файле *aspx.cs) Приходится работать непосредственно в файле *.aspx, что очень накладно... Скучаю очень по C++ билдеру - там как рыба...

Вот что сделал:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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, но не знаю как...

Помогите, пожалуйста....

Добавлено через 14 часов 18 минут
Ребят, формализую вопрос:
не подскажите как программно можно записать значение из DropDownList в ячейку GridView (ну и соответственно в SqlDataSource - т.е. значение, выбранное из DropDownList, должно быть записано в саму БД).
Перерыл весь инет - так найти решения и не удалось... Пробовал вот такое, но не выбранное значение никуда не сохраняется...


Первый вариант:
C#
1
2
3
4
5
6
7
        protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
        {
            DropDownList ddl = DetailsView1.FindControl("DropDownList1") as DropDownList;
            SqlDataSource2.UpdateCommand = "UPDATE [table1] SET [Facult_name] = @Facult_name, [Prepod_name] ='" + ddl.SelectedValue + "' WHERE [FacultID] = @original_FacultID";
            SqlDataSource2.Update();
            GridView1.DataBind();
        }
Второй вариант:
C#
1
2
3
4
5
6
7
        protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
        {
            DropDownList ddl = DetailsView1.FindControl("DropDownList1") as DropDownList;
            SqlDataSource2.UpdateParameters["Prepod_name"].DefaultValue = ddl.SelectedValue;
            this.SqlDataSource2.Update();
            GridView1.DataBind();
        }
Помогите, пожалуйста... Это одна из основных функций, которые просто необходимо реализовать в моем дипломе... А его защита через несколько дней

Благодарю!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2011, 13:43
Ответы с готовыми решениями:

Обращение к полям Profile
Требуется дополнить Profile свойствами. Что сделал: создал web.config, записал туда ...

Последовательное обращение к полям класса
Доброго времени суток. Подскажите, пожалуйста, в чем проблема? На C++ все работало. была...

DetailsView и DropDownList
Добрый день Я пытаюсь вставить DropDownList в DetailsView. Я пишу думаю что все правильно. Но ...

DropDownList И DetailsView
Добрый день! Делаю свой первый небольшой проект на ASP.NET и сталкнулся с некоторыми проблемами:...

DetailsView и SqlDataSource
Добрый день Подскажите пожалуйста Ставлю на форму SqlDataSource1 . Прописываю свойства Update,...

10
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.05.2011, 14:33 2
The_Immortal, если используется SqlDataSource - определите привязку для DropDownList

SelectedValue='<%# Bind("ColumnName") %>' - где ColumnName - нужный столбец
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2011, 15:14  [ТС] 3
Alligieri, проблема в том, что у меня SqlDataSource3 (который привязан к DropDownList) содержит выборку совершенно из другой таблицы. Соответственно использовать SelectedValue='<%# Bind("ColumnName") %>' я не могу, т.к. таблицы (которые используются в GridView/DetailsView - table1 и в DropDownList - table2) разные...
Не знаю, понятно ли объяснил...

Добавлено через 34 минуты
Поясню еще:


Я использовал вот это руководство: 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).
То есть если использовать вот такой код:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
               <asp:TemplateField HeaderText="ФИО преп." SortExpression="Prepod_name">
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource3" DataTextField="Prepod_name" 
                            DataValueField="Prepod_name" [b]SelectedValue='<%# Bind("Prepod_name") %>'[/b]>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
То получаю след. ошибку:
'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value

А если написать без SelectedValue='<%# Bind("Prepod_name") %>':
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                <asp:TemplateField HeaderText="ФИО преп." SortExpression="Prepod_name">
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource3" DataTextField="Prepod_name" 
                            DataValueField="Prepod_name">
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
то в DetailsView (в DropDownList1) списком выводятся значения из table2.
Но теперь при выборе какого-либо из этих значений, мне необходимо сохранить его в БД (GridView/SqlDataSource) - а вот как это сделать почему-то никто не знает, хотя задача на самом деле банальная: DropDownList получает значения из другой таблицы...
0
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.05.2011, 15:35 4
The_Immortal, на самом деле источник для DropDownList не имеет никакого отношения к Bind, вы можете туда хоть руками забивать в DataValueField я думаю вам надо ID (первичный ключ) препода запихать а обновлять можно определив UpdateCommand для дата сорца связанного с вашим детейлом или гридом (я запутался от объяснений) и CommandFiled с UpdateButton'ом
1
14.05.2011, 15:35
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2011, 15:44  [ТС] 5
Alligieri,
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <asp:TemplateField HeaderText="ФИО преп." SortExpression="Prepod_name">
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server" 
                            DataSourceID="SqlDataSource3" DataTextField="Prepod_name" DataValueField="id" 
                            SelectedValue='<%# Bind("Prepod_name") %>'>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value

Я сейчас застрелюсь.......((((((
0
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.05.2011, 16:05 6
The_Immortal, это означает что список загруженный в DropDownList не содержал Value которое б отвечало значению столбца, если поле Prepod_name может содержать NULL - заменяйте на пустую строку при выборке, а вообще такое правильно реализовать через внешний ключ на таблицу а не напрямую текст валить
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2011, 16:44  [ТС] 7
Alligieri, вы имеете в виду, что мне эти таблицы надо предварительно как-то связать между собой?
0
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.05.2011, 17:58 8
Цитата Сообщение от The_Immortal Посмотреть сообщение
Alligieri, вы имеете в виду, что мне эти таблицы надо предварительно как-то связать между собой?
А как же

Добавлено через 1 минуту
Предмет
ИД_Предмет
Название

Преподаватель
ИД_Преподаватель
ФИО

ПреподавательПредмет
ИД
ИД_Предмет
ИД_Преподаватель
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
15.05.2011, 06:50  [ТС] 9
Alligieri, огромное спасибо! Получилось!

А не подскажите еще, пожалуйста, как реализовать значение по умолчанию DropDownList'а? Т.е. я кликаю на строку GridView, мне открывается DetailsView и значение DropDownList'а должно соответствовать тому, которое находилось в GridView.

Я попробовал так:

C#
1
2
3
4
5
6
7
8
        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int x = GridView1.SelectedIndex;
            string q = GridView1.Rows[x].Cells[1].Text;
            Response.Write(q);
            DropDownList ddl = DetailsView1.FindControl("DropDownList1") as DropDownList;
            ddl.Items.FindByValue(q).Selected = true;
        }
Но мне на последнюю строчку выдается ошибка: Object reference not set to an instance of an object. - не понимаю к чему это... Такое ощущение, что DropDownList'a, к которому я обращаюсь еще нету...
0
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
15.05.2011, 12:00 10
Цитата Сообщение от The_Immortal Посмотреть сообщение
А не подскажите еще, пожалуйста, как реализовать значение по умолчанию DropDownList'а? Т.е. я кликаю на строку GridView, мне открывается DetailsView и значение DropDownList'а должно соответствовать тому, которое находилось в GridView.
Вам просто надо выбирать внутрь DetailView элемент по ИД из GridView, если определена привязка для SevelctedValue (Bind), то вес произойдет автоматом.
Кстати для рендеринга в виде строки используйте Eval - имею ввиду ваш пример выше с лабелом.
Eval - привязка "в одну сторону", рендерит значение
Bind - привязка в две стороны, рендерит значение и сохраняет состояние элемента при сохранении в источник
1
The_Immortal
1561 / 497 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
15.05.2011, 14:43  [ТС] 11
Цитата Сообщение от Alligieri Посмотреть сообщение
Вам просто надо выбирать внутрь DetailView элемент по ИД из GridView, если определена привязка для SevelctedValue (Bind), то вес произойдет автоматом.
Блин... А как это понять?( Я когда щелкаю на кнопку "Select" на какой-нибудь строке в GridView, то у меня открывается DetailsView со всеми полями из GridView, но поле, которое содержит DropDownList имеет значение не то, которое сидит в GridView.. Я не понимаю как с этим бороться... Выше пытался присвоить текущее значение DropDownList тому, которое в данный момент имеет GridView по этому полю... Но не вышло... Разве подход неверный?
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <asp:TemplateField HeaderText="Prepod_name" SortExpression="Prepod_name">
                <EditItemTemplate>
                    /<asp:DropDownList ID="DropDownList1" runat="server" 
                        DataSourceID="SqlDataSource3" DataTextField="name" DataValueField="id" 
                        SelectedValue='<%# Bind("Prepod_id") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Prepod_name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
0
15.05.2011, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 14:43

Обновление данных DetailsView
Имеется DetailsView в поле EditItem Tamplate вставил DropDownList и мне надо что бы выбранная...

DetailsView & FileUpload
Всем привет! Проблема такова: когда я редактирую запись в БД с помощью DetailsView, там кроме...

Dropdownlist внутри detailsview
На странице есть gridview и detailsview. Грид используется для отображения и выбора информации,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru