我需要根据用户在其中一个控件中选择的内容在组框中(来自数据库)填充一些用户控件。
每个控件都将由数据库中表中的一列填充。这些值有时为空,有时为字符串,有时为整数。查询将只返回一行数据。
组框包含许多不同类型的控件;但是,我只需要填充只读文本框。
以下是我如何解决这个问题。我的代码有效,但对我来说似乎很笨拙。IE。嵌套的 try/catch 和嵌套的循环/条件语句。
有没有更简单/更好/更清洁的方法来实现这一点?
ERPDB.sqlGetDataReader
return 接受一个 sql 语句字符串作为参数并返回一个OracleDataReader
.
sqlString
从用户控件获取用户输入并返回一个 sql 查询作为具有多列的字符串。
private void populateReadOnlyColumns()
{
OracleDataReader dr = ERPDB.sqlGetDataReader(sqlString(userSelection));
while (dr.Read())
{
int i = 0;
foreach (Control control in groupBox1.Controls)
{
if( control is TextBox)
{
TextBox txtBox = (TextBox)control;
if (txtBox.ReadOnly == true)
{
safeString(dr, txtBox, i);
i++;
}
}
}
}
}
private void safeString(OracleDataReader dr, Control control, int index)
{
try
{
try
{
control.Text = dr.GetString(index);
}
catch
{
control.Text = Convert.ToString(dr.GetInt32(index));
}
}
catch
{
control.Text = "";
}
}
private string sqlString(string userSelection)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("SELECT description");
sb.AppendLine(" ,job_title");
sb.AppendLine(" ,category");
sb.AppendLine(" ,risk_code");
sb.AppendLine(" ,exempt_flag");
sb.AppendLine(" ,pay_grade");
sb.AppendLine(" FROM emp_jobs");
sb.AppendLine(" WHERE job_code = '" + userSelection.Trim() + "'");
return sb.ToString();
}