使用数据库中的列名自动填充组合框

时间:2015-02-26 12:13:07

标签: c# database combobox

我正在尝试制作ContractManagementSystem应用程序。

dbh.openCon();

SqlCommand com = new SqlCommand("SELECT ID, CONTRACTNUMBER, PORTALID, PRICEPERGB, MINIMUMSTORAGECAPACITY, STARTDATE, MINIMUM CONTRACT DURATION, BILLINGPERIOD, INCASSO, ACTIVE FROM BACKUPCONTRACTS", dbh.getCon());
SqlDataReader reader;

reader = com.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("CONTRACTNUMBER", typeof(string));
dt.Load(reader);

cb_Choices.ValueMember = "Id";
cb_Choices.DisplayMember = "ContractNumber";
cb_Choices.DataSource = dt;

dbh.closeCon();`

这是我的代码,目的是将数据库项添加到名为ComboBox的{​​{1}}中。

正如您可能看到的,我的sqlcommand很长。我想知道是否有办法自动将项目添加到cb_Choices,因为我必须为大约12个其他数据库表做同样的事情。

如果您想知道ComboBoxdbhDatabaseHandler Class。 该应用程序是使用Microsoft Visual Studio 2010在c#中创建的

如果需要任何其他代码,请告诉我,我将编辑该帖子。

编辑:

我在评论中看到了一些混淆,所以我想我会清楚这一点。 我想要做的是从数据库中获取列的名称。

实施例

Example 1

在这种情况下,我希望黄色绘制的项目显示在cb_Choices

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果不指定列名,您将无法逃脱。虽然你可以尝试这样的东西来重新使用。如果发生异常,数据库连接会发生什么?您还需要确保连接在失败时关闭。

public void PopulateCombo(ComboBox combo, 
    string tableName, string keyColumn, string valueColumn)
{
    dbh.openCon();

    try
    {
      var com = new SqlCommand(string.Format("SELECT {0}, {1} FROM {2}", keyColumn, valueColumn, tableName) , dbh.getCon());
      var reader = com.ExecuteReader();
      var dt = new DataTable();

      dt.Columns.Add(keyColumn, typeof(string));
      dt.Columns.Add(valueColumn, typeof(string));
      dt.Load(reader);

      combo.ValueMember = keyColumn;
      combo.DisplayMember = valueColumn;
      combo.DataSource = dt;
    }
    finally
    {
      dbh.closeCon();
    }
}

PopulateCombo(cb_Choices, "BACKUPCONTRACTS", "ID", "ContractNumber");
PopulateCombo(cb_Other, "Other", "OtherID", "OtherValue");