DropDownList с повторяющимися полями значений данных OnSelected сбивается с толку и выбирает первое, почему?
Текущая проблема: Мой DropDownList предоставляется со свойствами DataTextField="COLUMNS_NAME" DataValueField="DATA_TYPE", DropDownList_SelectedIndexChanged() не сохраняет текст на основе выбранного ввода. Но он сохраняет первое значение из списка предметов
Требуемое решение: Как сохранить выбранный входной текст на основе свойства DATA_TYPE? Я пытался сохранить Session["DDLValue"] = DropDownList.SelectedItem.Text, но он всегда сохраняет первое значение из списка элементов, которое соответствует соответствующему DATA_TYPE, присутствующему в индексе.
то есть, если я выбираю "e" из следующих DropDownList, значение, сохраненное в DropDownList, равно "d"
Как сохранить "е"
COLUMN_NAME DATA_TYPE
a decimal
b decimal
c decimal
d int
e int
f varchar
g varchar
h varchar
i varchar
j varchar
Aspx код:
<asp:DropDownList ID="DropDownList5" runat="server" AutoPostBack="true" OnSelectedIndexChanged ="DropDownList5_SelectedIndexChanged" DataSourceID="MySqlDataSource">
</asp:DropDownList>
<asp:SqlDataSource ID="MySqlDataSource" runat="server">
</asp:SqlDataSource>
Код C#:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDownLists();
}
}
private void BindDropDownLists()
{
MySqlDataSource.ConnectionString = connection;
MySqlDataSource.SelectCommand = "SELECT DATA_TYPE + '_' + convert(varchar(10), ROW_NUMBER() OVER(ORDER BY DATA_TYPE ))as DATA_TYPE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT' AND COLUMN_NAME IN ('Column1','column2','Column3'))";
DropDownList5.DataTextField = "COLUMN_NAME";
DropDownList5.DataValueField = "DATA_TYPE";
DropDownList5.DataBind();
}
4 ответа
После рендера ваш выпадающий список будет выглядеть ниже, для правильного выбора необходимо использовать поле уникального значения
Я думаю, что вы должны иметь уникальные значения для выпадающего списка. Вы можете попытаться сфабриковать значения, которые вы могли бы однозначно определить. Что-то вроде:
COLUMN_NAME DATA_TYPE
a a_decimal
b b_decimal
c c_decimal
d d_int
e e_int
f f_varchar
g g_varchar
h h_varchar
i i_varchar
j j_varchar
Такое решение гарантирует, что у вас есть уникальные значения в раскрывающемся списке. Причиной использования этого является то, что создание DATA_TYPE
Строка и извлечение фактического значения из нее очень просто. Просто объединить COLUMN_NAME
а также DATA_TYPE
с подчеркиванием и разделением на подчеркивание, когда требуется фактическое значение.
Суть: вы должны попытаться иметь уникальную ценность для выпадающего списка. Это может быть идентификатор или другое уникальное значение.
Пожалуйста, примите это как отправную точку, а не как решение для копирования.
Поскольку у вас есть повторяющиеся значения в data value field
проблема происходит. Он ищет первый матч и выбирает его.
Если вы хотите продолжить с этим, то вы можете добавить префикс некоторого целого числа с автоинкрементом и добавить его в поле значения и использовать substring
чтобы получить первоначальное значение.
Правильное решение: благодаря комментариям @Kumar Manish
Выберите команду внутри BindDropDownLists()
private void BindDropDownLists()
{
SqlDataSource.ConnectionString = connection;
SqlDataSource.SelectCommand= "SELECT DATA_TYPE + '_' + convert(varchar(10), ROW_NUMBER() OVER(ORDER BY DATA_TYPE ))as DATA_TYPE, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME = 'RESULT' AND COLUMN_NAME IN ('Column1','column2','Column3'))";
DropDownList5.DataTextField = "COLUMN_NAME";
DropDownList5.DataValueField = "DATA_TYPE";
DropDownList5.DataBind();
}