问题描述
有一个LIST里面存放了连接的客户端IP地址比如里面存放了两个IP地址这个是不固定的.可能会有多个然后有一个datagridview中也存放了多个IP地址我如何判断LIST中的IP地址是否在datagridview中存在,如果存在,那么修改datagridview中的状态参数图标.希望给出具体代码谢谢本人新手.我写的代码如下可是每次如果有新的IP上线总会覆盖掉前面已经成功连接的IP地址我不知道我代码是否判断有问题希望指教foreach(variteminipaddrssList){for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");}else{((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}}}
解决方案
解决方案二:
客户端和服务器的概念,可能你还没有搞明白。先从这方面了解。所谓List<>是存储,所谓DataGridView是UI控件,UI控件背后的数据源才是数据存储。你应该用两个数据存储去进行计算,而不是UI控件。
解决方案三:
你应当写两个方法,一个上线,一个下线,并且每次只修改一行就结束voidOnline(stringip){ipaddrssList.Add(ip);for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");return;}}}voidOffline(stringip){ipaddrssList.Remove(ip);for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");return;}}}
解决方案四:
上面的item换成ip
解决方案五:
for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();foreach(variteminipaddrssList){if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");}else{((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}}}
解决方案六:
如果非要先更新list再刷新整个界面,你可以先把所有图标换成离线,再把包含在list里那些行的换成在线for(inti=0;i<this.RadarTable.Rows.Count;i++){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("delete.png");}foreach(variteminipaddrssList){for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();if(item.ToString()==closeIP){((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=System.Drawing.Image.FromFile("add.png");break;}}}
解决方案七:
抱歉,网页卡了,打的全没了for(inti=0;i<this.RadarTable.Rows.Count;i++){stringcloseIP=this.RadarTable.Rows[i].Cells["SensorID"].Value.ToString();((DataGridViewImageCell)this.RadarTable.Rows[i].Cells["Column1"]).Value=ipaddrssList.Exists(item=>item.ToString()==closeIP)?System.Drawing.Image.FromFile("add.png"):System.Drawing.Image.FromFile("delete.png");}
解决方案八:
引用1楼sp1234的回复:
客户端和服务器的概念,可能你还没有搞明白。先从这方面了解。所谓List<>是存储,所谓DataGridView是UI控件,UI控件背后的数据源才是数据存储。你应该用两个数据存储去进行计算,而不是UI控件。
是的但是首先我现在有一张表存放客户端的IP地址,这个时候默认图标都显示成功,然后根据服务端监听过来的客户端IP判断哪一个不在线。所以才产生了我现在的问题。。