【问题标题】:C# data from database to label从数据库到标签的 C# 数据
【发布时间】:2014-09-25 17:58:31
【问题描述】:

编辑: 我决定再写一次这篇文章。

我在从数据库中自动创建标签时遇到问题。

这就是我写的[新代码]:

    public partial class Form1 : Form
    {

    int i = 0;
    int r = 0;
    int c = 0;

    int x = 22;
    Label[] lbl1 = new Label[25];


    public Form1()
    {
        InitializeComponent();
    }




    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString);

        string Worker_names = "SELECT Worker_Name, Worker_SName FROM Workers";
        SqlCommand cmd = new SqlCommand(Worker_names, conn);
        cmd.Connection = conn;
        SqlDataAdapter sdadapter = new SqlDataAdapter(cmd);
        DataTable DataTable1 = new DataTable();
        sdadapter.Fill(DataTable1);

        conn.Open();

                foreach (DataRow row in DataTable1.Rows)
                {

                    DataTable1.Rows[r].ToString();
                    string getValue = cmd.ExecuteScalar().ToString();

                    if (getValue != null)
                    {
                        lbl1[i].Text = getValue;
                        lbl1[i].Location = new System.Drawing.Point(60, x);
                        lbl1[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 9F,
                                    System.Drawing.FontStyle.Bold,
                                    System.Drawing.GraphicsUnit.Point,
                                    ((byte)(0)));
                        lbl1[i].BackColor = Color.LightBlue;

                        panel1.Controls.Add(lbl1[i]);
                        panel1.AutoSize = true;
                        panel1.Show();
                        panel1.Refresh();

                        i++;
                        r++;
                        c++;
                        x = x + 30;
                    }
                    else
                        MessageBox.Show("End");
              }
              conn.Close();
         }
    }

程序第二次循环读取时,此行出现错误:

     lbl1[i].Text = getValue;

     NullReferenceException was unhandled

所以也许现在更好。你能帮帮我吗?

【问题讨论】:

  • 你真的需要阅读关于 sql 的内容。你已经填充了数据表,为什么还要循环和 ExecuteScalar 再次......这是可怕的 sql
  • 这是非常有帮助的评论,你认识史蒂夫吗?...我想看看你是如何将第一步放在 c# 或 sql 中的。
  • 我只是编辑我的主要帖子。请现在看。很抱歉上次发表评论 - 我很沮丧。

标签: c# database label autocreate


【解决方案1】:
Label[] lbl1 = new Label[25];

应该是

Label[] lbl1 = new Label[DataTable1.Rows.Count];

你需要这样做

lbl1[I] = new Label(..)

打电话之前

lbl1[I].Text = ...`

【讨论】:

  • 什么都没有改变:(我会慢慢仔细检查一遍
  • @Kafus null ref 异常是由于没有初始化标签引起的,现在是什么错误?你介意解释一下什么是 DataTable1.Rows[r].ToString();为了??
  • 同样的错误 - 没有任何改变。 DataTable1.Rows[r].ToString() 来读取行 (?) 或者这是我旧代码的浪费
  • @Kafus 我建议您阅读 MSDN 中的 SqlConnection。如果您已经执行过一次查询并填充了数据表,只需从数据表中读取数据......数据表将所有数据存储在内存中,您可以像二维数组一样使用这些数据。同样的错误,你为什么看不到哪个对象是空的?
  • 错误在 lbl1[i].Text = getValue; NullReferenceException 未处理。你调用的对象是空的。就像您建议的那样,我需要更仔细地阅读有关 SqlCon 的信息。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多