2016-09-06 2 views
0

Вот история:Показать пользовательские значения в комбинированном окне

У меня есть этот код, который получает имена Col моей таблицы и заполнить поле со списком

 void fillcombo() 
    { 


     MySqlConnection con = new MySqlConnection(ConnectionString); 

     string com = "SELECT * FROM driver"; 
     MySqlCommand command = new MySqlCommand(com, con); 
     con.Open(); 
     MySqlDataReader reader = command.ExecuteReader(); 



     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      cmbfilter.Items.Add(reader.GetName(i)); 
     } 

затем из него я выполнить этот запрос

"SELECT driverFName,driverLName,vehicleID,driverContact FROM driver WHERE "+cmbfilter.SelectedText+" LIKE '" + seachtext + "%';"; 

Эта вещь работает как шарм, но значения поля со списком не очень аккуратные.

enter image description here

вместо того, чтобы, если я могу дать ему некоторые пользовательские значения

, такие как

driverFName = Имя driverLName = Фамилия

также

есть любой способ сделать это.

Это только для тестирования, пожалуйста, не беспокойтесь о том, чтобы не использовать значения параметров

+0

У меня есть псевдоним и теперь поле со списком в порядке, но поисковый запрос, дающий мне ошибки, получает имя псевдонима не настоящее имя столбца после предложения WHERE – Binku

ответ

0

я нашел решение это работает, но не уверен, что это правильный путь

использовал включатель Case

void fillcombo() 
    { 


     MySqlConnection con = new MySqlConnection(ConnectionString); 

     string com = "SELECT driverFName,driverLName,vehicleID,driverDlNo,driverContact FROM driver"; 
     MySqlCommand command = new MySqlCommand(com, con); 
     con.Open(); 
     MySqlDataReader reader = command.ExecuteReader(); 


     cmbfilter.DisplayMember = "Text"; 
     cmbfilter.ValueMember = "Value"; 
     List<ComboboxItem> list = new List<ComboboxItem>(); 

     for (int i = 0; i < reader.FieldCount; i++) 
     { 

      string C = reader.GetName(i); 
      string _name=""; 
      string _value = ""; 
      switch (C) 
      { 
        case "id": 
        _name= "ID"; 
        _value = C; 
         break; 



        case "driverFName": 
         _name = "First Name"; 
         _value = C; 
         break; 

        case "driverLName": 
         _name = "Last name"; 
         _value = C; 
         break; 

        case "vehicleID": 
         _name = "Vehicle No"; 
         _value = C; 
         break; 

        case "driverDlNo": 
         _name = "Licence No"; 
         _value = C; 
         break; 

        case "driverContact": 
         _name = "Contact No"; 
         _value = C; 

         break; 


      } 

то этот код, чтобы создать поле со списком со значениями

   ComboboxItem item = new ComboboxItem(); 
      item.Text = _name; 
      item.Value = _value; 
      list.Add(item); 



     } 
     cmbfilter.DataSource = list; 
     cmbfilter.SelectedItem = null; 
     } 



    public class ComboboxItem 
    { 
     public string Text { get; set; } 
     public string Value { get; set; } 

     public override string ToString() 
     { 
      return Text; 
     } 
0

Вы можете попробовать поставить alias по вашему запросу?

"SELECT 
driverFName as 'First Name', 
driverLName as 'Last Name', 
vehicleID,driverContact FROM driver WHERE "+cmbfilter.SelectedText+" LIKE '" + seachtext + "%';"; 
+0

вы можете быть более конкретным PLS? – Binku

+0

Какое «конкретное» вы хотите? Вы уже используете псевдоним на основе вашего комментария, это сработало, но я не понимаю, о чем вы говорите в своем предложении where. –

0

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

Или вы также можете пойти с файлом ресурсов на основе того же механизма, который подходит для локализации.

Ваш звонок.

EDIT: В соответствии с просьбой, более подробная информация.

Псевдонимы

Использование driverFName AS "New Column Name", но это добавит ненужный вес на запрос SQL.

словарь

Создать простой словарь <String, String> в своем классе, с именем столбца в качестве ключа и удобных для пользователей Value. Лучше, но все же локализация будет настоящим адом.

Таким образом, вы сможете сделать что-то вроде var niceName = stringDictionary["driverFName"].

Ресурсы

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

+0

Можете ли вы быть более конкретным? его приятно, если может дать образец или шаги :) – Binku

Смежные вопросы