问题描述
做课设用了一个tabcontrol控件,在tabcontrol里面连接数据库自动生成label如图背景的颜色是红色表示已入住绿色的表示空房那么问题来了,单击绿色的label进行入住操作,入住成功后tabcontrol的tabpage1不能更新,其余的tabpage234可以更新请问怎么在tabcontrol的tabpage1更新?急急急~代码如下publicpartialclassMainMenu:Form{Formloginform=null;stringname;publicMainMenu(Formf,TextBoxtb){InitializeComponent();this.loginform=f;name=tb.Text;}publicMainMenu(){InitializeComponent();}privatevoidMainMenu_FormClosed(objectsender,FormClosedEventArgse){loginform.Close();}privatevoidbutton1_Click(objectsender,EventArgse){GuestRoomStandardroomtype=newGuestRoomStandard();roomtype.ShowDialog();}privatevoidbutton2_Click(objectsender,EventArgse){Settingnihao=newSetting(name);nihao.ShowDialog();}privatevoidlab_Mouseleave(objectsender,EventArgse){Labellab=(Label)(sender);toolTip1.Hide(lab);}privatevoidtabControl1_Selecting_2(objectsender,TabControlCancelEventArgse){mainmenu();}privatevoidbutton3_Click(objectsender,EventArgse){AddGuestRoomaddroomtype=newAddGuestRoom(this.tabControl1.SelectedTab.Text);addroomtype.ShowDialog();}privatevoidMainMenu_Activated(objectsender,EventArgse){mainmenu();}privatevoidmainmenu(){try{stringCString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=HotelsManagement.mdb";stringstrCom="SELECT*FROMGuestRoomORDERBYRoomIDASC";//该字符串变量用来存放把从数据集集中读取的数据转换成的字符串stringstrCom2="SELECTRoomID,[SettleAmount]FROMCoustomerORDERBYRoomIDASC";OleDbConnectionMyCon=newOleDbConnection(CString);//创建一个OleDbConnection对象MyCon.Open();OleDbCommandMyCom=newOleDbCommand();MyCom.Connection=MyCon;MyCom.CommandType=CommandType.Text;MyCom.CommandText=strCom;OleDbDataAdapterMyDataAdapter=newOleDbDataAdapter();MyDataAdapter.SelectCommand=MyCom;DataSetMyDs=newDataSet();MyDataAdapter.Fill(MyDs,"GuestRoom");MyCom.CommandText=strCom2;OleDbDataAdapterMyDataAdapter2=newOleDbDataAdapter();MyDataAdapter2.SelectCommand=MyCom;DataSetMyDs2=newDataSet();MyDataAdapter.Fill(MyDs2,"Coustomer");boolflag=false;inti=0,j=0,k=1,l=0,m=0,Row=0;for(i=0;i<MyDs.Tables["GuestRoom"].Rows.Count;i++){Labellab=newLabel();//定义一个Label控件if((Convert.ToString(this.tabControl1.SelectedTab.Text)=="全部")||(Convert.ToString(MyDs.Tables["GuestRoom"].Rows[i]["Type"])==Convert.ToString(this.tabControl1.SelectedTab.Text))){lab.Text=Convert.ToString(MyDs.Tables["GuestRoom"].Rows[i]["RoomID"])+"n"+Convert.ToString(MyDs.Tables["GuestRoom"].Rows[i]["Type"]);Row=Convert.ToInt32(MyDs.Tables["GuestRoom"].Rows[i]["RoomID"])/100;lab.TextAlign=System.Drawing.ContentAlignment.MiddleCenter;lab.Size=newSystem.Drawing.Size(55,55);lab.Font=newFont("宋体",12);for(m=0;m<MyDs2.Tables["Coustomer"].Rows.Count;m++){if(Convert.ToString(MyDs.Tables["GuestRoom"].Rows[i]["RoomID"])==Convert.ToString(MyDs2.Tables["Coustomer"].Rows[m]["RoomID"])&&(Convert.ToString(MyDs2.Tables["Coustomer"].Rows[m]["SettleAmount"])=="")){lab.BackColor=Color.Red;flag=true;lab.Name=Convert.ToString(i)+","+Convert.ToString(m);break;}}if(!flag){lab.Name=Convert.ToString(i);lab.BackColor=Color.Green;}flag=false;if(k!=Row&&j!=0){l++;//换行j=0;//回车}elseif(j!=0&&j%10==0){l++;//换行j=0;//回车}lab.Location=newPoint(j*65+10,l*65+10);this.tabControl1.SelectedTab.Controls.Add(lab);lab.MouseClick+=newMouseEventHandler(lab_click);//用代码动态连接事件lab.MouseEnter+=newEventHandler(lab_Mouseenter);lab.MouseLeave+=newEventHandler(lab_Mouseleave);lab.MouseDoubleClick+=newMouseEventHandler(lab_Doubleclick);j++;k=Row;}}MyCon.Close();}catch(Exceptionex){MessageBox.Show("连接HotelsManagement数据库发生错误:"+ex.ToString(),"错误!");}}
解决方案
解决方案二:
你的代码没看。你的意思是:第一个选项卡,从数据库加载数据,如果空房(绿色标签展现)、红色标签代表入住现在你点击绿色标签,完成入住。这个时候第一个选项卡没有刷新?如果你的软件只有一个客户端,点击入住,无需全部是刷新;如果有多个客户端在工作,点击入库,选项卡1的内容需要重新载入一下,绘制最新的入住、空房情况。多个客户端的话,需要考虑并发操作。
解决方案三:
tabpage234怎么做的,tabpage1就怎么做呗。