使用我的数据库表的列名加载我的组合框

时间:2014-04-19 17:53:11

标签: c# wpf xaml

我使用以下方法从数据库加载数据并填入我的组合框。例如,如果我的数据库表如下:

表名:人

Person_Id Person_Name
1         Jason
2         Carl

Jason和Carl的名字将被加载到组合框中。这很好用。我现在想要加载我的组合框只有列名,如Person_ID,Person_Name。有没有办法可以修改我当前的方法来做到这一点?请指教。

private void fillCombo(string query, string name, ComboBox c)
{
    MySqlCommand cmdReader;
    MySqlDataReader myReader;

    try
    {
        cmdReader = new MySqlCommand(query, conn);
        myReader = cmdReader.ExecuteReader();

        while (myReader.Read())
        {
            string temp;
            if (name != null)
            {
                temp = myReader.GetString(name);
                if (!c.Items.Contains(temp))
                {
                    c.Items.Add(temp);
                }
            }
        }
        myReader.Close();
    }
    catch (Exception e) { Console.WriteLine("Unable to load data from database"); }
}

public MainWindow()
{
    InitializeComponent();
    fillCombo("SELECT * FROM PERSONS;", "Person_Name", comboBox1);  
}

2 个答案:

答案 0 :(得分:1)

你可以得到这样的列名:

cmdReader = new MySqlCommand(query, conn);
myReader = cmdReader.ExecuteReader();

for(int index=0; index < reader.FieldCount; index++)
{
   c.Items.Add(myReader.GetName(index));
}

答案 1 :(得分:0)

您可以在MySqlDataReader上使用GetSchemaTable()方法:

private void fillCombo(string query, string name, ComboBox c)
{
    MySqlCommand cmdReader;
    MySqlDataReader myReader;

    try
    {
        cmdReader = new MySqlCommand(query, conn);
        myReader = cmdReader.ExecuteReader();

        var table = myReader.GetSchemaTable();

        foreach (DataColumn column in Table.Columns)
        {
            string s = column.ColumnName;

            if (!c.Items.Contains(s))
            {
                c.Items.Add(s);
            }
        }

        myReader.Close();
    }
    catch (Exception e) { Console.WriteLine("Unable to load data from database"); }
}