Как вы будете держать определенную страну на вершине в раскрывающемся списке? - PullRequest
7 голосов
/ 07 октября 2010

В списке стран, которые должны отображаться в алфавитном порядке, вам нужно поместить Соединенные Штаты вверху списка. Как ты это сделаешь?

Я ответил, что у меня будет структура таблицы таким образом, чтобы США находились на уровне id-0. Остальные страны перечислены в алфавитном порядке.

Поэтому, когда я получу из таблицы, я сделаю "SELECT CountryName from tableOfCountries ORDER by ID"

Я не уверен, хотел ли интервьюер услышать это. Поэтому я предложил другой вариант заполнения массива стран США в качестве первого элемента. Затем остальные элементы будут заполнены из набора результатов запроса.

"SELECT CountryName FROM tableOfCountries WHERE countryName != 'US' ORDER by COUNTRY_NAME".

Это гарантирует, что США не будут выбраны дважды.

Интервьюер также не был удовлетворен этим вариантом. Поэтому он спросил меня, имел ли я в виду какой-то другой вариант. Затем я сказал текстовый файл на веб-сервере со списком значений.

Есть ли у вас какие-либо варианты, которые вы можете придумать?

Ответы [ 8 ]

10 голосов
/ 07 октября 2010

Есть еще один столбец int в таблице стран, который называется приоритет.

Назначьте США приоритет больше 1 и оставьте все другие страны равными 0.

Ваш SQL будет выглядеть так:

select Name from countries
order by precedence desc, name asc

Это позволит вам масштабировать это позже, если это будет необходимо.

8 голосов
/ 07 октября 2010

Обычно что-то вроде:

SELECT 
    CountryName 

from tableOfCountries 

ORDER by 
    (case when CountryName = 'US' then 0 
     else 1 end) asc, CountryName asc
4 голосов
/ 07 октября 2010

Я, конечно, не стал бы злоупотреблять ID таким образом, если бы мог избежать его.

Можно дать приоритеты странам, а затем:

select isoCode, name from countries order by priority desc, name

В качестве альтернативы, почему оно должно быть наверху??Я бы предложил изменить логику так, чтобы они оставались в алфавитном порядке, но США были выбором по умолчанию, пока они не изменились.

3 голосов
/ 07 октября 2010

Может быть:

select name from countries
order by case when name = 'US' then 1 else 2 end, name;
1 голос
/ 27 ноября 2010

Привет, я нашел эту статью, надеюсь, это поможет вам прояснить вопросы: http://www.nexustechnologiesllc.com/blog/fixing-registration-forms-country-selection/

Я новичок, извинитесь, если я не ответил на вопрос в правильном формате

1 голос
/ 07 октября 2010

Еще один способ сделать это - получить список состояний, а затем отфильтровать их в виде данных, исключая элементы по умолчанию. Затем установите для свойства управления списком AppendDataBoundItems значение true. Добавьте свои элементы в элемент управления списком и затем привязайте данные к представлению данных.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

Это приведет к тому, что вы не очистите значения по умолчанию, когда происходит привязка данных.

0 голосов
/ 07 марта 2019

Я согласен с @AaronMcIver, что большинство ответов здесь слишком сосредоточены на серверной части для того, что является проблемой презентации. Поскольку это вопрос C #, я бы вообще не манипулировал базой данных, а использовал бы LINQ для сортировки результатов. Например:

countries.OrderBy(x => x.ISOCode == "US").ThenBy(x => x.CountryName)

Это решение имеет дополнительное преимущество, заключающееся в том, что запрос вашей страны можно использовать повторно для других целей. Пусть запрос к базе данных будет общим, а затем отсортируйте его так, как вам нужно в приложении.

Есть хорошие примеры здесь и здесь

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

Если это в C #, независимо от того, как данные возвращаются с сервера, помещая их в определенный тип и реализуя IComparable для данного типа. Затем раскрывающийся список будет содержать их соответственно, поскольку в методе CompareTo можно указать, что тип США является «большим» среди других стран.

class Country : IComparable<Country>
{
    int IComparable<Country>.CompareTo(Country other)
    {
        <US logic>
        else
            return String.Compare(this.CountryName, other.CountryName);
    }
}

РЕДАКТИРОВАТЬ: На самом деле это в C # на основе тегов OP. Почему фокус на бэкэнд для презентации происходит, мне не понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...