我正在尝试制作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个其他数据库表做同样的事情。
如果您想知道ComboBox
是dbh
。DatabaseHandler Class
。
该应用程序是使用Microsoft Visual Studio 2010在c#中创建的
如果需要任何其他代码,请告诉我,我将编辑该帖子。
编辑:
我在评论中看到了一些混淆,所以我想我会清楚这一点。 我想要做的是从数据库中获取列的名称。
实施例
在这种情况下,我希望黄色绘制的项目显示在cb_Choices
答案 0 :(得分:0)
尝试数据绑定。查看下面的一些链接
https://www.youtube.com/watch?v=mEHl0Fzsq3w
https://www.youtube.com/watch?v=AVZPTzkQOcY
https://msdn.microsoft.com/en-us/library/bb655884%28v=vs.90%29.aspx
答案 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");