【问题标题】:Show Custom Values in Combo box在组合框中显示自定义值
【发布时间】:2016-09-07 19:49:03
【问题描述】:

故事是这样的:

我有这段代码可以获取我的表格的列名并填充组合框

        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 + "%';";

这个东西就像一个魅力,但组合框的值不是那么整齐。

如果我可以给它一些自定义值而不是那样

driverFName = 名字 driverLName = 姓氏

同样

有什么办法吗..

这只是为了测试请不要担心没有使用参数值

【问题讨论】:

  • 我添加了别名,现在组合框没问题,但是搜索查询给了我错误,它在 WHERE 子句之后得到别名而不是真实的列名

标签: c# mysql combobox


【解决方案1】:

您可以尝试将alias 放在您的查询中吗?

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

【讨论】:

  • 你能说得更具体些吗?
  • 你想要什么样的“具体”?您已经根据您的评论使用了别名,它有效,但我不明白您在 where 子句中所说的错误。
【解决方案2】:

我找到了一个可行的解决方案,但不确定它是否正确

用了一个开关盒

 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;
        }

【讨论】:

    【解决方案3】:

    您可以使用数据库别名,或者您可以使用列名作为键及其匹配的用户友好值的匹配字典。

    或者你也可以使用基于相同机制的资源文件,有利于本地化。

    您的电话。

    编辑:根据要求,提供更多详细信息。

    别名

    使用driverFName AS "New Column Name",但它会给您的 SQL 请求增加不必要的权重。

    字典

    在您的类中创建一个简单的字典&lt;String, String&gt;,列名称为Key,用户友好的Value。更好的是,本地化将是真正的地狱。

    因此您将能够执行var niceName = stringDictionary["driverFName"] 之类的操作。

    资源

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

    【讨论】:

    • 你能再具体一点吗?如果可以提供示例或步骤,那就太好了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2013-08-05
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    相关资源
    最近更新 更多