在项目中遇到一个问题,就是用户在前台修改了单元格的数据,点提交就要更新数据,之前Grid中的数据并不多,单元格的数量只不过200~300个
就算是遍历一下,也就是更新200~300条数据,可是随着Grid的复杂程度越来越高,界面上已经有5000多个单元格了,这着实让人觉得抓狂了
更新5000条数据,效率和速度可想更知,问题是大多数单元格的数据用户并没有修改过,5000多个单元格也许只改过其中几个单元格,却要更新这5000条数据,这确实让人说不过去。幸运的是今天偶尔发现了一个方法,可以在后台获得前台修改过的单元格有哪些,只针对这些单元格进行处理
下面给出代码
protected void WebImageButton1_Click(object sender, Infragistics.WebUI.WebDataInput.ButtonEventArgs e) { int cngs = Grid.DisplayLayout.StateChanges.Count; for (int i = 0; i < cngs; i++) { StateChange sc = Grid.DisplayLayout.StateChanges[i]; if (sc.Type == "ChangedCells") //获得状态为修改过的单元格 { string id = sc.DataKey.ToString(); var level = sc.Level; //r_c var tag = sc.Tag; var arrayIndex = level.Split('_'); var rowIndex = int.Parse(arrayIndex[0]); //获得行索引 var colIndex = int.Parse(arrayIndex[1]); //获得列索引 var colKey = Grid.Columns[colIndex].Key; //获得行DataKey var oldValue = sc.OldValue; //修改前的值 var newValue = sc.Value; //修改后的值 //下面就可以处理这个单元格的数据了,update/delete/insert 悉听尊便 } } }