Здравствуйте!
Есть у меня обычный ListView. Я хочу заменить в нем TextBox'ы для редактирования на всплывающие списки, например, Combobox.
Для пробы заменил один из TextBox'ов:
'System.Web.UI.DataBinder' не содержит определение для 'Bind'
и
"System.Web.UI.WebControls.ListViewItem" не содержит определение для "DataItem". Не удалось найти метод расширения "DataItem", принимающий первый аргумент типа "System.Web.UI.WebControls.ListViewItem" (пропущено использование директивы или ссылка на сборку?)
Там дальше ещё что-то в статье написано, но я не могу разобрать.
Подскажите как мне правильно этот всплывающий список вставить, так чтобы работало. Может у кого уже получалось так сделать, подскажите что я не так делаю.
Здравствуйте, leaveIIIusion, Вы писали:
III>Здравствуйте! III>Есть у меня обычный ListView. Я хочу заменить в нем TextBox'ы для редактирования на всплывающие списки, например, Combobox. III>Подскажите как мне правильно этот всплывающий список вставить, так чтобы работало. Может у кого уже получалось так сделать, подскажите что я не так делаю.
<asp:DropDownList SelectedValue='<%# Bind("ProjectID") %>'
DataSourceID="!Здесь имя Вашего SqlDataSource!" DataTextField="!Имя отображаемого поля!"
DataValueField="!Имя поля, которое будет выступать значением!" ID="DropDownList" runat="server">
</asp:DropDownList>
Re[2]: Встроить Combobox в ListView?
От:
Аноним
Дата:
28.03.12 11:28
Оценка:
Здравствуйте, Solova, Вы писали:
S>Почему бы не использовать DropDownList? S>
S><asp:DropDownList SelectedValue='<%# Bind("ProjectID") %>'
S> DataSourceID="!Здесь имя Вашего SqlDataSource!" DataTextField="!Имя отображаемого поля!"
S> DataValueField="!Имя поля, которое будет выступать значением!" ID="DropDownList" runat="server">
S> </asp:DropDownList>
S>
Таже проблемма как и у автора поста. Опишу проблемму:
использую VS 2010. АСП создаю страничку на которой выводятся данные из БД в ListView, при чем выводится объедененная таблица. Т.е. Имею таблицу Владельцы с полями ID, FirstName, LastName, CarID. И вторую таблицу Машины с полями ID и CarName. Теперь при редактировании записи в ListView, пытаюсь вместо выводимого TextBox для поля CarName, вывести DropDownList с данными из таблицы Машины. Получается все прекрасно до тех пор пока не пытаюсь привязывать выводимый DropDownList к редактируемой записи. А конкретно пытаюсь изменить выбранное значение списка, чтобы оно соответствовало текущему автомобилю редактируемого владельца. Вот пример кода:
Если использую SelectedValue отладчик ругается выдает следующую ошибку: "Sys.WebForms.PageRequestManagerServerErrorException: 'ddlCarID' имеет SelectedValue, что недопустимо, так как этот элемент не существует в списке элементов. Имя параметра: value"
Привязать по SelectedIndex тоже не получается поскольку в выводимой таблице нет CarID а есть только CarName. Может конечно проблема возникает из-за того, что список я заполняю отдельным запросом SqlDataSource2, в то время как в ListView вывожу объдененную таблицу из SqlDataSource1. Но тогда мне собственно совсем не понятно как реализовать все одним запросом и список заполнить и в ListView вывести объедененную таблицу. Если кто-нибудь может подсказать как решить проблему буду очень признателен.
Re[3]: Встроить Combobox в ListView?
От:
Аноним
Дата:
28.03.12 11:40
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Solova, Вы писали:
S>>Почему бы не использовать DropDownList? S>>
S>><asp:DropDownList SelectedValue='<%# Bind("ProjectID") %>'
S>> DataSourceID="!Здесь имя Вашего SqlDataSource!" DataTextField="!Имя отображаемого поля!"
S>> DataValueField="!Имя поля, которое будет выступать значением!" ID="DropDownList" runat="server">
S>> </asp:DropDownList>
S>>
А>Таже проблемма как и у автора поста. Опишу проблемму: А>использую VS 2010. АСП создаю страничку на которой выводятся данные из БД в ListView, при чем выводится объедененная таблица. Т.е. Имею таблицу Владельцы с полями ID, FirstName, LastName, CarID. И вторую таблицу Машины с полями ID и CarName. Теперь при редактировании записи в ListView, пытаюсь вместо выводимого TextBox для поля CarName, вывести DropDownList с данными из таблицы Машины. Получается все прекрасно до тех пор пока не пытаюсь привязывать выводимый DropDownList к редактируемой записи. А конкретно пытаюсь изменить выбранное значение списка, чтобы оно соответствовало текущему автомобилю редактируемого владельца. Вот пример кода:
А>
А>Если использую SelectedValue отладчик ругается выдает следующую ошибку: "Sys.WebForms.PageRequestManagerServerErrorException: 'ddlCarID' имеет SelectedValue, что недопустимо, так как этот элемент не существует в списке элементов. Имя параметра: value" А>Привязать по SelectedIndex тоже не получается поскольку в выводимой таблице нет CarID а есть только CarName. Может конечно проблема возникает из-за того, что список я заполняю отдельным запросом SqlDataSource2, в то время как в ListView вывожу объдененную таблицу из SqlDataSource1. Но тогда мне собственно совсем не понятно как реализовать все одним запросом и список заполнить и в ListView вывести объедененную таблицу. Если кто-нибудь может подсказать как решить проблему буду очень признателен.
У Вас в качестве SelectedValue байндится поле CarName, а значения (ValueField) DropDownList выбираются из поля ID. Соответственно при привязке выбранного значения (SelectedValue) оно будет искаться в источнике данных по полю ID, а не CarName. Вам бы нужно поставить SelectedValue='<%# Bind("CarID") %>', где CarID — это ID записи в DropDownList, которую нужно выбрать. В общем Вам нужно, если я правильно всё понял, сделать в запросе JOIN по полю CardID, чтобы оно было в числе полей источника данных.
А>У Вас в качестве SelectedValue байндится поле CarName, а значения (ValueField) DropDownList выбираются из поля ID. Соответственно при привязке выбранного значения (SelectedValue) оно будет искаться в источнике данных по полю ID, а не CarName. Вам бы нужно поставить SelectedValue='<%# Bind("CarID") %>', где CarID — это ID записи в DropDownList, которую нужно выбрать. В общем Вам нужно, если я правильно всё понял, сделать в запросе JOIN по полю CardID, чтобы оно было в числе полей источника данных.
Вы все верно поняли. Я понял свою ошибку но пока что не вижу решения. В ListView у меня объеденненная таблица но при выводе CarID поля нет. После объеденения таблиц Владельцы и машины поле Владельцы.CarID заменяется полем Машины.CarName. Вот как выглядит запрос:
SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Теперь я хочу отредактировать запись, при этом имею объеденую таблицу и вместо TextBox использую DropDownList в поле CarName. DropDownList берет данные из отдельного запроса и ничего по сути не знает о редактируемой записи. Т.е. фактически он вообще получается с ней не связан. CarID у меня получается в ListView нет и как выкрутится из данной ситуаци я пока что не вижу.
Re[5]: Встроить Combobox в ListView?
От:
Аноним
Дата:
28.03.12 12:06
Оценка:
Здравствуйте, Haldey2000, Вы писали:
А>>У Вас в качестве SelectedValue байндится поле CarName, а значения (ValueField) DropDownList выбираются из поля ID. Соответственно при привязке выбранного значения (SelectedValue) оно будет искаться в источнике данных по полю ID, а не CarName. Вам бы нужно поставить SelectedValue='<%# Bind("CarID") %>', где CarID — это ID записи в DropDownList, которую нужно выбрать. В общем Вам нужно, если я правильно всё понял, сделать в запросе JOIN по полю CardID, чтобы оно было в числе полей источника данных.
H>Вы все верно поняли. Я понял свою ошибку но пока что не вижу решения. В ListView у меня объеденненная таблица но при выводе CarID поля нет. После объеденения таблиц Владельцы и машины поле Владельцы.CarID заменяется полем Машины.CarName. Вот как выглядит запрос:
H>
H>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
H>
H>Теперь я хочу отредактировать запись, при этом имею объеденую таблицу и вместо TextBox использую DropDownList в поле CarName. DropDownList берет данные из отдельного запроса и ничего по сути не знает о редактируемой записи. Т.е. фактически он вообще получается с ней не связан. CarID у меня получается в ListView нет и как выкрутится из данной ситуаци я пока что не вижу.
А если вот так:
SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName, Car.CarID FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Здравствуйте, Аноним, Вы писали:
А>А если вот так:
А>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName, Car.CarID FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Это безусловно думаю поможет конечно. Но тогда мне придется тянуть за сабой хвост из скрытых данных в виде CarID. Мне бы хотелось конечно этого избежать. Но если по другому никак, то что поделать.
Здравствуйте, Аноним, Вы писали:
А>А если вот так:
А>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName, Car.CarID FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Вобще мне кажется что это по сути не очень корректно. Если бы я разрабатывал клиента на чистом C# я бы просто по доступному наименованию автомобиля выбрал из списка. Но насколько я понял DropDownList в ASP не дает мне такой возможности. И мне по сути либо тянуть хвост из дополнительных данных, либо в DropDownList в качестве DataValueField использовать CarName (если такое вообще возможно). Но тогда опять таки у меня возникнут проблеммы при сохранении данных. Поскольку придется искать отдельным подзапросом ID машины по заданному CarName.
Здравствуйте, Аноним, Вы писали:
А>А если вот так:
А>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName, Car.CarID FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Спасибо вам агромное я переделал думаю что теперь работает корректно и с точки зрения данных (нет избыточности данных на клиенте) и работоспособность отвечает требованиям.
В итоге благодоря вам я осознал как все это работает и вот что получилось:
Это DropDownList:
Это мой запрос на выборку данных:
SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
Это запрос на сохранение измененных данных:
UPDATE Employee SET FirstName = @FirstName, LastName = @LastName, CarID = (SELECT ID FROM Car WHERE (CarName = @CarName)) WHERE (EmployerID = @EmployerID)
Спасибо еще раз. Думаю что вы натолкнули меня на правельное решение. Проще все же добавить подзапрос при сохранении чем тянуть дополнительные скрытые данные (да и думаю безопаснее).
Re[7]: Встроить Combobox в ListView?
От:
Аноним
Дата:
28.03.12 12:56
Оценка:
Здравствуйте, Haldey2000, Вы писали:
H>Здравствуйте, Аноним, Вы писали:
А>>А если вот так:
А>>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName, Car.CarID FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
H>Спасибо вам агромное я переделал думаю что теперь работает корректно и с точки зрения данных (нет избыточности данных на клиенте) и работоспособность отвечает требованиям. H>В итоге благодоря вам я осознал как все это работает и вот что получилось: H>Это DropDownList:
H>
H>Это мой запрос на выборку данных: H>SELECT Employee.EmployerID, Employee.FirstName, Employee.LastName, Car.CarName FROM Employee INNER JOIN Car ON Employee.CarID = Car.ID
H>Это запрос на сохранение измененных данных: H>UPDATE Employee SET FirstName = @FirstName, LastName = @LastName, CarID = (SELECT ID FROM Car WHERE (CarName = @CarName)) WHERE (EmployerID = @EmployerID)
H>Спасибо еще раз. Думаю что вы натолкнули меня на правельное решение. Проще все же добавить подзапрос при сохранении чем тянуть дополнительные скрытые данные (да и думаю безопаснее).
Обращайтесь!
Лучше всё же было использовать CarId, так как в Вашем случае может сложиться такая ситуация, что в базе будет несколько машин с одним и тем же CarName. Тогда и запрос и обновление приведёт к неоднозначности в выполнении программы.