Ошибка при раскрытии с GridView при привязке SelectedValue из базы данных? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть GridView с несколькими столбцами, первый столбец имеет выпадающий список, который позволяет пользователю выбрать семестр. Когда они выбирают семестр, он должен сохранить выбранное значение в раскрывающемся списке. Существует таблица, которая загружает раскрывающийся список, а затем таблица, которая загружает столбцы. Моя цель - позволить им выбрать значение из раскрывающегося списка, заполнить другие столбцы и сохранить результаты, чтобы после возвращения на страницу выбранное значение раскрывающегося списка показывалось вместе с другими данными. Существуют две таблицы: одна для раскрывающегося списка значений для выбора и другая таблица, в которой хранится выбранное фактическое значение. Когда я ввожу «Spring» в основную таблицу базы данных, в которой хранится фактическое значение, я получаю ошибку ниже. Любая помощь приветствуется!

Код:

<asp:DropDownList ID="ddSemester" runat="server" DataSourceID="SemesterSrc" DataTextField="Semester" DataValueField="SemesterId" SelectedValue='<%#Bind("Semester") %>'>

<asp:SqlDataSource ID="SemesterSrc" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT * FROM [Semester]"></asp:SqlDataSource>

Ошибка:

$ exception {"У ddSemester есть SelectedValue, которое недопустимо, поскольку оно несуществует в списке элементов. Имя параметра: значение "} System.ArgumentOutOfRangeException

У меня есть значение в базе данных Spring, поэтому Spring должен отображаться в раскрывающемся списке.

1 Ответ

0 голосов
/ 07 октября 2019

SelectedValue должно быть одним значением в вашей базе данных, например, «Весна» или «Лето». Не следует указывать целый столбец данных из вашей базы данных. Прямо сейчас он пытается привязать целую колонку. Это верно только в том случае, если ваш оператор select возвращает одну строку, но я даже не уверен, что это правильно. Вам нужно выбрать выбранное значение для нагрузки? Обычно, если у вас есть несколько элементов управления данными, где один элемент управления фильтрует второй элемент управления, вам нужно два источника данных, где у одного есть набор фильтров:

<asp:DropDownList ID="ddSemester" runat="server" DataSourceID="SemesterSrc" DataTextField="Semester" DataValueField="SemesterId">    
<asp:SqlDataSource ID="SemesterSrc" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT DISTINCT Semester,SemesterId FROM [Semester]"></asp:SqlDataSource>

<asp:SqlDataSource ID="SemesterSrcFiltered" runat="server" ConnectionString="<%$ ConnectionStrings:mainConnString %>" SelectCommand="SELECT * FROM [Semester]" FilterExpression="Semester='{0}'">
    <FilterParameters>
      <asp:ControlParameter Name="Semester" ControlId="ddSemester" PropertyName="SelectedValue"/>
    </FilterParameters>
</asp:SqlDataSource>

DDL установит значениеэто используется разделом FilterParameters источника данных SemesterSrcFiltered, чтобы отфильтровать данные только по этому значению. Затем вы можете использовать этот источник данных в других элементах управления (например, в виде сетки) для отображения дополнительной информации. Не следует устанавливать оба элемента управления на один источник данных и пытаться манипулировать этим источником данных на лету с помощью фильтрации, чтобы это не оказывало нежелательного влияния и на ваш DDL.

...