【发布时间】:2013-02-28 04:29:45
【问题描述】:
我想使用从mysql 检索到的值设置一些按钮文本(内容)。
直到现在我总是这样:
if (rdr.Read())
{
Item1.Visibility = Visibility.Visible;
Item1txt.Text = rdr.GetString("item_name");
}
if (rdr.Read())
{
Item2.Visibility = Visibility.Visible;
Item2txt.Text = rdr.GetString("item_name");
}
if (rdr.Read())
{
Item3.Visibility = Visibility.Visible;
Item3txt.Text = rdr.GetString("item_name");
}
这种方法很好用,因为我在每个按钮中检索了正确的值,但它使可读性变得很糟糕..
当我开始这个项目时,我对 C# 的了解为零,所以我尝试了一些类似的方法:
while (rdr.Read())
{
Item4.Visibility = Visibility.Visible;
Item4txt.Text = rdr.GetString("item_name");
Item5.Visibility = Visibility.Visible;
Item5txt.Text = rdr.GetString("item_name");
}
但这给了我从按钮中的数据库中检索到的相同值..
示例:
button 1: test1 | button 2: test1 | button 3: test1.. etc..
我需要什么:
button 1: test1 | button2: test2 | button 3: test3.. etc..
现在我的 C# 知识每天都在进步,所以我想学习一些新东西。
现在我正在尝试使用 foreach 循环,但我觉得我错过了一些东西:
using (MySqlConnection conn = new MySqlConnection(_CS))
{
conn.Open();
string cmd = "SELECT * FROM ordertopos LIMIT 10";
MySqlCommand custid = new MySqlCommand(cmd, conn);
using (MySqlDataReader rdr = custid.ExecuteReader())
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Load(rdr);
foreach (System.Data.DataRow row in dt.Rows)
{
Orderl1.Text = row["customerid"].ToString();
}
}
}
基本上我想知道如何设置按钮的内容,从 mysql 中检索,以更有效和更易于维护的代码..
我是foreach 的新手,所以请具体说明。
【问题讨论】:
-
Orderl1.Text = row["customerid"].ToString();将始终覆盖现有文本。您可能需要做类似Orderl1.Text += (string)row["customerid"];的事情,您实际上在哪里声明或最初使用Orderl1.Text? `将 SQL 代码包装在 try{}catch{} 周围,并逐步执行代码并确保您也获得了值 -
行本身是否包含一个值(例如客户 ID),可以让您导出您想要设置文本的按钮的名称?例如,如果客户 ID 为 2,您希望将文本设置为
Button2。 -
对我来说,你的代码很好。您可以对其进行重构以使其看起来更好,但核心思想是正确的。尤其是使用 if(rdr.Read()) 的第一种方法 - 可能是最有效的方法(不考虑通过索引而不是列名访问 reader 的值)。
-
按钮的默认值为空,从我的数据库中检索的值将填充按钮的文本。
customerid与这个问题无关 -
不客气。另外,由于您是 StackOverflow 的新手,我想通知您,您可以通过勾选答案旁边的勾号来为好的答案投票并接受对您帮助最大的答案。在本网站上,点赞或接受的答案都算作“感谢”。