繁体   English   中英

为每行C#动态创建控件

[英]Create control dynamically for each row C#

问题

我正在尝试为包含图像的每一行创建一个控件。

private void ass_wijzig_Load(object sender, EventArgs e)
{
    //query's
    string count = "select COUNT(Image) from product";
    string query = "select image from product";
    //commands
    MySqlCommand cmd = new MySqlCommand(count, connection);
    cmd.CommandType = CommandType.Text;
    int totalcount = Convert.ToInt32(cmd.ExecuteScalar());
    MySqlCommand cmd2 = new MySqlCommand(query, connection);
    MySqlDataReader reader = cmd2.ExecuteReader();
    if (reader.Read())
    {
        for (int i = 0; i <= totalcount; i++)
        {
            //What do I need to put here?
        }
    }

案件

该程序将查找我的产品表中有多少行。 每个创建的行都包含一个图像。 我希望程序检查有多少行(有效),然后创建一个包含来自该行图像的图片框。 如您所见,我已经确保每一行都得到计数。 有人告诉我不要使用数组。 为了从数据库中检索图片,您需要使用数据适配器和数据表。

如何创建一个图片框,其中包含表格中每一行的正确图片?

附件

将一张图片放入图片框的代码

private void ass_wijzig_Load(object sender, EventArgs e)
{
        string query = "Select Image From Product where productid = 1";
        MySqlCommand cmd = new MySqlCommand(query, connection);
        // MySqlDataReader reader = cmd.ExecuteReader();
        var da = new MySqlDataAdapter(cmd);
        var ds = new DataSet();
        da.Fill(ds, "Image");
        int count = ds.Tables["Image"].Rows.Count;



        if (count > 0)
        {
            var data = (Byte[])(ds.Tables["Image"].Rows[count - 1]["Image"]);
            var stream = new MemoryStream(data);
            pictureBox1.Image = Image.FromStream(stream);
        } 

非常重要!,上层代码仅用于确保能够将图片放入图片框,我包含了此代码以支持我必须使用数据表和数据适配器的声明。 此代码不再包含在我的项目中。

提前致谢

这样尝试

private void ass_wijzig_Load(object sender, EventArgs e)
     {
            string query = "Select Image From Product where productid = 1";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            // MySqlDataReader reader = cmd.ExecuteReader();
            var da = new MySqlDataAdapter(cmd);
            var ds = new DataSet();
            da.Fill(ds, "Image");
            int count = ds.Tables["Image"].Rows.Count;
           List<PictureBox> pbList = new List<PictureBox>();

            for (int i = 0; i < count-1; i++)
            {                
                var data = (Byte[])(ds.Tables["Image"].Rows[i]["Image"]);
                var stream = new MemoryStream(data);
                pbList[i] = new PictureBox();               
                pbList[i].Name = "pic" + i;
                pbList[i].Size = new Size(300, 75);
                pbList[i].Image = Image.FromStream(stream);
                myform.Controls.Add(pbList[i]);
            } 
      }

更新

您不需要为PictureBox循环数组

private void ass_wijzig_Load(object sender, EventArgs e)
         {
                string query = "Select Image From Product where productid = 1";
                MySqlCommand cmd = new MySqlCommand(query, connection);
                // MySqlDataReader reader = cmd.ExecuteReader();
                var da = new MySqlDataAdapter(cmd);
                var ds = new DataSet();
                da.Fill(ds, "Image");
                int count = ds.Tables["Image"].Rows.Count;

                for (int i = 0; i < count-1; i++)
                {                
                    var data = (Byte[])(ds.Tables["Image"].Rows[i]["Image"]);
                    var stream = new MemoryStream(data);
                    PictureBox pbList = new PictureBox();               
                    pbList.Name = "pic" + i;
                    pbList.Size = new Size(300, 75);
                    pbList.Image = Image.FromStream(stream);
                    myform.Controls.Add(pbList);
                } 
          }
private void ass_wijzig_Load(object sender, EventArgs e)
{
        string query = "Select Image From Product where productid = 1";

       MySqlDataAdapter adpt=new MySqlDataAdapter(query,connection);
       DataTable dt=new DataTable();
       adpt.Fill(dt);
     if(dt.Rows.Count>0)
     {
      PictureBox pcb[]=new PictureBox[dt.rows.count];
       for(int i=0;i<dt.Rows.Count;i++)
       {
            var data = (Byte[])(dt.Rows[i]["Image"].ToString());
            var stream = new MemoryStream(data);
            pcb[i].Image = Image.FromStream(stream);
       }

     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM