[英]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.