Я хочу заполнить ComboBox всем списком имен стран, используя
Using System.Globalization
Using System.Collections
вот мое кодирование XAML для ComboBox
<ComboBox x:Name="countryComboBox" Width="300"/>
В коде С# у меня есть кнопка добавления. Вот этот код, и я хочу получить страну из ComboBox и сохранить ее в базе данных MySql. Как я могу это сделать?
private void addButton_Click(object sender, RoutedEventArgs e)
{
try
{
string Query = @"INSERT INTO 'bcasdb'.'tbl_student'
('reg_id',
'std_fname',
'std_lname',
'tbl_batch_batch_id',
'gender')
VALUES (@regId, @fName, @lName, @bID, @gender, @country)";
//This is command class which will handle the query and connection object.
MySqlConnection conn = new MySqlConnection(BCASApp.DataModel.DB_CON.connection);
MySqlCommand cmd = new MySqlCommand(Query, conn);
conn.Open();
cmd.Parameters.AddWithValue("@regId", this.regIDInput.Text);
cmd.Parameters.AddWithValue("@fName", this.fnameInput.Text);
cmd.Parameters.AddWithValue("@lName", this.lnameInput.Text);
cmd.Parameters.AddWithValue("@bID", this.batchIDInput.Text);
cmd.Parameters.AddWithValue("@gender",this.maleRadioButton);
cmd.ExecuteNonQuery();
conn.Close();
successmsgBox();
}
catch (Exception)
{
errormsgBox();
}
}
Код для получения всех стран:
using System.Globalization;
using System.Runtime.InteropServices;
public class LocalesRetrievalException : Exception
{
public LocalesRetrievalException(string message)
: base(message)
{
}
}
#region Windows API
private delegate bool EnumLocalesProcExDelegate(
[MarshalAs(UnmanagedType.LPWStr)]String lpLocaleString,
LocaleType dwFlags, int lParam);
[DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool EnumSystemLocalesEx(EnumLocalesProcExDelegate pEnumProcEx,
LocaleType dwFlags, int lParam, IntPtr lpReserved);
private enum LocaleType : uint
{
LocaleAll = 0x00000000, // Enumerate all named based locales
LocaleWindows = 0x00000001, // Shipped locales and/or replacements for them
LocaleSupplemental = 0x00000002, // Supplemental locales only
LocaleAlternateSorts = 0x00000004, // Alternate sort locales
LocaleNeutralData = 0x00000010, // Locales that are "neutral" (language only, region data is default)
LocaleSpecificData = 0x00000020, // Locales that contain language and region data
}
#endregion
public enum CultureTypes : uint
{
SpecificCultures = LocaleType.LocaleSpecificData,
NeutralCultures = LocaleType.LocaleNeutralData,
AllCultures = LocaleType.LocaleWindows
}
public static List<CultureInfo> GetCultures(CultureTypes cultureTypes)
{
List<CultureInfo> cultures = new List<CultureInfo>();
EnumLocalesProcExDelegate enumCallback = (locale, flags, lParam) =>
{
try
{
cultures.Add(new CultureInfo(locale));
}
catch (CultureNotFoundException)
{
// This culture is not supported by .NET (not happened so far)
// Must be ignored.
}
return true;
};
if (EnumSystemLocalesEx(enumCallback, (LocaleType)cultureTypes, 0, (IntPtr)0) == false)
{
int errorCode = Marshal.GetLastWin32Error();
throw new LocalesRetrievalException("Win32 error " + errorCode + " while trying to get the Windows locales");
}
// Add the two neutral cultures that Windows misses
// (CultureInfo.GetCultures adds them also):
if (cultureTypes == CultureTypes.NeutralCultures || cultureTypes == CultureTypes.AllCultures)
{
cultures.Add(new CultureInfo("zh-CHS"));
cultures.Add(new CultureInfo("zh-CHT"));
}
return cultures;
}
public static List<string> GetCountries()
{
List<CultureInfo> cultures = GetCultures(CultureTypes.SpecificCultures);
List<string> countries = new List<string>();
foreach (CultureInfo culture in cultures)
{
RegionInfo region = new RegionInfo(culture.Name);
if (!(countries.Contains(region.EnglishName)))
{
countries.Add(region.EnglishName);
}
}
return countries;
}
Как использовать этот код:
Вам просто нужно вызвать метод GetCountries
:
comboBoxCountries.ItemsSource = GetCountries();
Ссылки: Замена для CultureInfo.GetCultures в.NET Приложения для Windows Store
Вы можете заполнить Combobox таким образом,
добавить using System.Globalization
Установите этот элемент Combobox ItemsSource следующим образом:
countryComboBox.ItemsSource = GetCountryList();
public static List<string> GetCountryList()
{
List<string> cultureList = new List<string>();
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
foreach (CultureInfo culture in cultures)
{
RegionInfo region = new RegionInfo(culture.LCID);
if (!(cultureList.Contains(region.EnglishName)))
{
cultureList.Add(region.EnglishName);
}
}
return cultureList;
}
Вы можете просто получить selectedItem и передать его с запросом,
cmd.Parameters.AddWithValue("@country", this.countryComboBox.SelectedItem.ToString());
EDIT: вы упомянули, что это приложение для Windows Store, проверьте эту ссылку. Как загрузить страну
Replacement for CultureInfo.GetCultures in.NET Windows Store apps
Если нет, вы должны написать собственный способ загрузки стран из базы данных.