2016-09-06 87 views
0

这里显示的自定义值是故事:在组合框中

我有这样的代码,获取山坳名字我的表,并填写组合框

 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

我发现了一个解决方案。它的工作原理,但不知道这是否是正确的做法

使用SWICH案例

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

你能更具体吗? – Binku

+0

你想要什么样的“具体”?你已经根据你的评论使用了别名,它的工作原理,但我不明白你在where子句中说什么错误。 –

0

那么你可以用DB别名去,或者你可以做一个使用列名作为键和他们匹配的用户友好值的匹配字典。

或者您也可以使用基于相同机制的资源文件,对本地化很有帮助。

您的电话。

编辑:根据要求,更多的细节。

别名

使用driverFName AS "New Column Name"但它会不必要的重量添加到您的SQL请求。

字典

创建一个简单的字典<String, String>你的班上,与列名作为重点和用户友好价值。更好但是​​,本地化将是真正的地狱。

所以你可以做点像var niceName = stringDictionary["driverFName"]

资源

最后的解决方案,使用资源文件在您的项目,将其设置为你会支持不同的语言环境。每个文件就像一个字典,您将依赖于第二个解决方案相同的系统,但从长远来看具有更强大的解决方案。

+0

你能更具体吗?其不错,如果可以给样品或步骤:) – Binku