如何在多个标签中打印选定的数据库列?

时间:2013-08-09 14:03:30

标签: c# mysql

请帮我从不同标签的数据库中显示选定的列数据。

protected void Page_Load(object sender, EventArgs e)
{
    con.Open();       
        MySqlCommand countcmd = new MySqlCommand("select count(*) from category", con);
        int temp = Convert.ToInt32(countcmd.ExecuteScalar().ToString());
        MySqlCommand inscmd = new MySqlCommand("select catname from category where cid > 0", con);
        string temp1 = inscmd.ExecuteScalar().ToString();
        MySqlDataReader dr = inscmd.ExecuteReader();
        dr.Read();
        for (int i = 0; i < temp; i++){
            ("label" & i).text = dr[i].ToString();
        }       
}

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

启动时完全错误,你无法使用(string).Text访问控件。

下一个问题是如何创建这些标签,如果它们是在设计时预先创建的,你怎么知道你有足够的,你打算用额外的那些做什么?

PS你应该为每个查询敲掉一个新的连接,并让连接池处理缓存而不是传递实例化的一轮,除非在极少数情况下。

你也应该处理你的查询对象,使用这样做是有好处的,而不是在开始耗尽内存时依靠GC来整理。

此外,您的查询会返回包含一列的行,因此您需要一个while循环。

我要做的第一件事就是从查询中返回IEnumerable<String>

e.g。

之类的东西
private IEnumerable<String> GetCategoryNames(String argConnectionString)
{
   using(SqlConnection con = new SqlConnection(argConnnectionString))
   {
       con.Open()
       using(SqlCommand com = new SqlCommand("Select CatName From Category Where cid > 0", con))
       {
           using(SqlDataReader reader = com.ExecuteReader())
           {
              while (reader.Read())
              {
                  yield reader[0].ToString();
              }
           }
       }
   }
}

然后我会点击一些可以用

之类滚动和实例化标签的东西
private void AddNewLabels(argConnectionString)
{
  int count = 0;
  Point startPoint = new Point(0,0) // assuming this is where you want the first label to be in the scroll box
  labelSpacing = 20; // how far apart vertically should your column of labels be.
  foreach(String labelText in GetCatgoryNames(argConectionString))
  {
      Label label = new Label();
      label.parent = myScrollBox;
      label.Left = StartPoint.X;
      label.Top = Count * LabelSpacing + StartPoint.Y;
      label.Name = String.Concat'MyDynamicLabel'
      // etc
      label.Text = labelText;
      count++;
  }
}

protected void Page_Load(object sender, EventArgs e)
{
   DestroyPreviousLabels();
   AddNewLabels(conn.ConnectionString);
}

DestroyNewLabels将使用名称以“MyDynamicLabel”开头的FindControls FindControl。 或者你可以变得更聪明一些,只能摧毁你不需要的东西,只有你创造更多。如果你想这样做,考虑一个List<Label>并添加和删除,那么你将有一个循环计数,你不必继续找到它们,因为这不是明智的表现。

一旦你开始工作,一些想法和一些重构机会。

注意,这不是我的头脑,所以可能是愚蠢的或两个。