我在使用以下代码时遇到了一些困难,当我运行代码时,它通过了每个没有问题,但我的结果不是我想要的,代码的想法是在胜利上显示按钮-form基于数据表的结果,但是当代码运行时,表单上没有显示任何按钮,并且应该出现一个按钮,因为有一个“是”值
private void formconfig1()
{
dtresults = SQLMethods.GetUserNames();
string scrap;
string production;
string change;
int i = 0;
foreach (DataRow row in dtresults.Rows)
{
scrap = dtresults.Rows[i]["btnscrap"].ToString();
if (scrap.Equals("yes"))
{
btnSREntry.Show();
}
else
{
btnSREntry.Hide();
}
production = dtresults.Rows[i]["btnproduction"].ToString();
if (production.Equals("yes"))
{
btnProductionEntry.Show();
}
else
{
btnProductionEntry.Hide();
}
change = dtresults.Rows[i]["btnchange"].ToString();
if (change.Equals("yes"))
{
btnSRChange.Show();
}
else
{
btnSRChange.Hide();
}
i++;
}
答案 0 :(得分:0)
假设您的数据列是布尔值(如果它们不是,那么它们应该是因为您使用它们的方式),您的代码应该看起来像这样。
bool scrap;
bool production;
bool change;
foreach (DataRow row in dtresults.Rows)
{
scrap = (bool)row["btnscrap"];
if (scrap)
{
btnSREntry.Show();
}
else
{
btnSREntry.Hide();
}
production = (bool)row["btnproduction"];
if (production)
{
btnProductionEntry.Show();
}
else
{
btnProductionEntry.Hide();
}
change = (bool)row["btnchange"];
if (change)
{
btnSRChange.Show();
}
else
{
btnSRChange.Hide();
}
}
答案 1 :(得分:0)
我的猜测是dtresults.Rows[i]["btnscrap"]
实际上是一个布尔值
您必须测试布尔值而不是字符串表示。
bool isScrap = (bool)dtresults.Rows[i]["btnscrap"];
if (isScrap )
{
btnSREntry.Show();
}
else
{
btnSREntry.Hide();
}
但那只是一位客人。您的数据库中的列btnchange
,btnproduction
和btnscrap
有哪些类型?
答案 2 :(得分:0)
我将以这种方式更改您的代码
foreach (DataRow row in dtresults.Rows)
{
btnSREntry.Visible = (row["btnscrap"].ToString().ToLower() == "yes");
btnProductionEntry.Visible = (row["btnproduction"].ToString().ToLower() == "yes");
btnSRChange.Visible = (row["btnchange"].ToString().ToLower() == "yes");
}
首先,我将使用在foreach循环中声明的DataRow,第二,我将你的字段的内容转换为小写,第三,我将使用属性Visible而不是Show / Hide方法来方便使用三元运算符
也可以使用DataRow扩展Field
foreach (DataRow row in dtresults.Rows)
{
btnSREntry.Visible = (row.Field<string>("btnscrap").ToLower() == "yes");
btnProductionEntry.Visible = (row.Field<string>("btnproduction").ToLower() == "yes");
btnSRChange.Visible = (row.Field<string>("btnchange").ToLower() == "yes");
}
当然,这假设您的数据库字段是文本类型 相反,如果它们是布尔(位),那么你可以大量简化代码
foreach (DataRow row in dtresults.Rows)
{
btnSREntry.Visible = row.Field<bool>("btnscrap");
btnProductionEntry.Visible = row.Field<bool>("btnproduction");
btnSRChange.Visible = row.Field<bool>("btnchange");
}
答案 3 :(得分:0)
你循环的事实表明你有更多的一行,如果你在特定列的每一行都没有true / yes值,你最终会显示一行的按钮然后隐藏它在下一行。
例如,根据结果的顺序,最终会隐藏所有按钮,只有最后一行指示按钮的状态。
btnscrap | btnproduction | btnchange
yes yes yes
yes no yes
no no no <-- the only row that matters