问题描述
想实现的功能是这样的:显示在数据库中所有的学生照片,并单击某个学生照片显示其基本信息。目前我写的已经可以显示所有的学生照片了,但单击照片显示信息实在是不知道怎么写。本人学生,忘各位大神指点一二,谢谢。stringstrConnect="datasource=.;initialcatalog=test;integratedsecurity=true";SqlConnectionconConnection=newSqlConnection(strConnect);conConnection.Open();stringsqlStr="selectpicturefrompicture";SqlDataAdaptermyAdapter=newSqlDataAdapter(sqlStr,conConnection);DataSetmydataSet=newDataSet();myAdapter.Fill(mydataSet,"test_user");conConnection.Close();imageList1.ImageSize=newSize(139,102);for(inti=0;i<mydataSet.Tables["test_user"].Rows.Count;i++){imageList1.Images.Add(Image.FromFile(""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+""));}for(inti=0;i<imageList1.Images.Count;i++){PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];loca+=108;}
解决方案
解决方案二:
pic.Click+=你的事件处理函数
解决方案三:
是的,在你的for循环里面加1楼的代码,方法逻辑自己处理下即可。for(inti=0;i<imageList1.Images.Count;i++){PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];loca+=108;pic.Click+=(ss,ee)=>{...//处理逻辑};}
解决方案四:
引用1楼caozhy的回复:
pic.Click+=你的事件处理函数
再自定义一个函数写,但这样不是只能显示某个学生的信息,怎么显示点击照片的那个人的信息呢?
解决方案五:
引用2楼guwei4037的回复:
是的,在你的for循环里面加1楼的代码,方法逻辑自己处理下即可。for(inti=0;i<imageList1.Images.Count;i++){PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];loca+=108;pic.Click+=(ss,ee)=>{...//处理逻辑};}
没看懂、我是要这样再建一个方法吗?privatevoidpic_Click(objectsender,EventArgse){}然后pic.Click+=pic_Click;对吗?
解决方案六:
是的,然后再在方法里面根据你的要求处理一下逻辑就可以了。
解决方案七:
引用5楼guwei4037的回复:
是的,然后再在方法里面根据你的要求处理一下逻辑就可以了。
但是这样做,我弄不懂要怎么做才能显示其信息(逻辑不懂了,瓶颈)。比如说我要点击这个照片就能显示它的地址(地址就在我上面写的数据库里),这个要怎么做。
解决方案八:
引用5楼guwei4037的回复:
是的,然后再在方法里面根据你的要求处理一下逻辑就可以了。
privatevoidpic_Click(objectsender,EventArgse){stringstrConnect="datasource=.;initialcatalog=test;integratedsecurity=true";SqlConnectionconConnection=newSqlConnection(strConnect);conConnection.Open();stringsqlStr="selectpicturefrompicture";SqlDataAdaptermyAdapter=newSqlDataAdapter(sqlStr,conConnection);DataSetmydataSet=newDataSet();myAdapter.Fill(mydataSet,"test_user");conConnection.Close();label1.Text=mydataSet.Tables["test_user"].Rows[i]["picture"].ToString();}
Row[i]里i的值怎么才能取到当前点击的图片呢
解决方案九:
你把imageList1.Images[i].Tag="这里面存放学生的学号",然后在方面里面取一下,查一下对应的信息给文本框赋值就可以了;
解决方案十:
引用8楼guwei4037的回复:
你把imageList1.Images[i].Tag="这里面存放学生的学号",然后在方面里面取一下,查一下对应的信息给文本框赋值就可以了;
让我试试写下,谢谢你
解决方案十一:
引用8楼guwei4037的回复:
你把imageList1.Images[i].Tag="这里面存放学生的学号",然后在方面里面取一下,查一下对应的信息给文本框赋值就可以了;
for(inti=0;i<imageList1.Images.Count;i++){imageList1.Images[i].Tag=""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+"";PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];pic.Click+=pic_Click;loca+=108;}}privatevoidpic_Click(objectsender,EventArgse){label1.Text=imageList1.Images[i].Tag.ToString();}
又不知道怎么取i值了
解决方案十二:
引用8楼guwei4037的回复:
你把imageList1.Images[i].Tag="这里面存放学生的学号",然后在方面里面取一下,查一下对应的信息给文本框赋值就可以了;
关键是用代码建了了很多个pictureBox,又不知道他们的name是什么。要不直接picture1.tag就可以了。
解决方案十三:
privatevoidpic_Click(objectsender,EventArgse){Imageimg=(Image)sender;label1.Text=imageList1.Img.Tag.ToString();}
我猜的,也许有用
解决方案十四:
把图片放在学生表中,然后把信息取出来publicclassUserInfo{publicstringName{get;set;}publiestringAddress{get;set;}....................}stringstrConnect="datasource=.;initialcatalog=test;integratedsecurity=true";SqlConnectionconConnection=newSqlConnection(strConnect);conConnection.Open();stringsqlStr="select*fromusers";SqlDataAdaptermyAdapter=newSqlDataAdapter(sqlStr,conConnection);DataSetmydataSet=newDataSet();myAdapter.Fill(mydataSet,"test_user");conConnection.Close();imageList1.ImageSize=newSize(139,102);DataTableuserDt=mydataSet.Tables["test_user"];for(inti=0;i<userDt.Rows.Count;i++){UserInfouser=newUserInfo();DataRowdr=userDt.Rows[i];PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=Image.FromFile(""+dr[i]["picture"].ToString()+"")loca+=108;user.Name=dr[i]["Name"].ToString()user.Address=dr[i]["Address"].ToString()pic.Click+=pic_Click;pic.Tag=user;}privatevoidpic_Click(objectsender,EventArgse){PictureBoxpic=(PictureBox)sender;UserInfo=(UserInfo)pic.Tag;}
解决方案十五:
13楼就是正解~