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();
     }
Другие вопросы по тегам