判断DatagridView行修改保存
这些天一直在想怎么样才能去判断datagridview里的一行是不是已经被修改,如果是,就保存.最后还是发现用datagridview的rowenter事件来解决了.
方法如下:
1,先定义一个全局变量selectedRow=99999(这个值取一个行number绝对不会出现的即可)和一个对象变量(这里是computer)如下:
private int selectedRow=99999;
private Computer oldComputer;
2.创建RowEnter事件如下:
privatevoiddgv_RowEnter(objectsender,DataGridViewCellEventArgse){if(dgv.CurrentCell!=null&&selectedRow==9999){intid=cc.Items[dgv.CurrentCell.RowIndex].ID;stringsn=cc.Items[dgv.CurrentCell.RowIndex].SN;stringmodel=cc.Items[dgv.CurrentCell.RowIndex].ModelID;DateTimepdate=cc.Items[dgv.CurrentCell.RowIndex].PurchaseDate;DateTimewdate=cc.Items[dgv.CurrentCell.RowIndex].WarrantyDate;stringmac=cc.Items[dgv.CurrentCell.RowIndex].MAC;stringvendor=cc.Items[dgv.CurrentCell.RowIndex].Vendor;stringsite=cc.Items[dgv.CurrentCell.RowIndex].SiteCode;stringremarks=cc.Items[dgv.CurrentCell.RowIndex].Remarks;oldComputer=newComputer(id,sn,model,pdate,wdate,mac,vendor,site,remarks);selectedRow=dgv.CurrentCell.RowIndex;}elseif(dgv.CurrentCell!=null){intid=cc.Items[selectedRow].ID;stringsn=cc.Items[selectedRow].SN;stringmodel=cc.Items[selectedRow].ModelID;DateTimepdate=cc.Items[selectedRow].PurchaseDate;DateTimewdate=cc.Items[selectedRow].WarrantyDate;stringmac=cc.Items[selectedRow].MAC;stringvendor=cc.Items[selectedRow].Vendor;stringsite=cc.Items[selectedRow].SiteCode;stringremarks=cc.Items[selectedRow].Remarks;ComputernewComputer=newComputer(id,sn,model,pdate,wdate,mac,vendor,site,remarks);if(Computer.IsModified(oldComputer,newComputer)){try{if(MessageBox.Show("Leavethisrowwillsaveallchangesyou'vemade,areyousavetoupdatethisrecord?","UpdateRecord",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)!=DialogResult.Cancel){newComputer.Update();}else{dgv.Rows[selectedRow].Cells[0].Value=oldComputer.ID;dgv.Rows[selectedRow].Cells[1].Value=oldComputer.SN;dgv.Rows[selectedRow].Cells[2].Value=oldComputer.ModelID;dgv.Rows[selectedRow].Cells[3].Value=oldComputer.PurchaseDate;dgv.Rows[selectedRow].Cells[4].Value=oldComputer.WarrantyDate;dgv.Rows[selectedRow].Cells[5].Value=oldComputer.MAC;dgv.Rows[selectedRow].Cells[6].Value=oldComputer.Vendor;dgv.Rows[selectedRow].Cells[7].Value=oldComputer.SiteCode;dgv.Rows[selectedRow].Cells[8].Value=oldComputer.Remarks;}}catch(Exceptionex){MessageBox.Show(ex.Message);}}}if(selectedRow!=9999&&e.RowIndex!=selectedRow){intid1=cc.Items[e.RowIndex].ID;stringsn1=cc.Items[e.RowIndex].SN;stringmodel1=cc.Items[e.RowIndex].ModelID;DateTimepdate1=cc.Items[e.RowIndex].PurchaseDate;DateTimewdate1=cc.Items[e.RowIndex].WarrantyDate;stringmac1=cc.Items[e.RowIndex].MAC;stringvendor1=cc.Items[e.RowIndex].Vendor;stringsite1=cc.Items[e.RowIndex].SiteCode;stringremarks1=cc.Items[e.RowIndex].Remarks;oldComputer=newComputer(id1,sn1,model1,pdate1,wdate1,mac1,vendor1,site1,remarks1);selectedRow=e.RowIndex;}
通过触发两次RowEnter事件来比较看是否有修改.第一次得到当前行的数据以及行号,第二次再次检查该行号数据,两次做对比来决定是否需要更新.
最后把第二次的行号所有数据赋值给oldComputer以为下次比较做准备.
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。