一直想写一个比较完善的datagridview的更新数据函数,今天终于写了一下,没有太多优化,测试运行正常。 主要功能就是根据列索引,列索引集合中的值,或列名,列名集合中的值来更新指定索引,索引集合或列名,列名集合中的单元格的值。中心思想就是你既可以用索引来限定查找范围,也可以用列名来限定查找范围,效果如下 函数代码有点多,我贴在这里,不用使用是非常简单的,在后面我会详细说明:summary根据指定条件更新指定内容summaryparamnamemygvDataGridView的IDparamparamnameFindColumnInfo条件列,可以是int,string,int〔〕,string〔〕paramparamnameFindColumnValue条件列的值paramparamnameUpdateColumnInfo更新列paramparamnameUpdateColumnValue更新值parampublicvoidUpdateDatas(DataGridViewmygv,objectFindColumnInfo,objectFindColumnValue,objectUpdateColumnInfo,objectUpdateColumnValue){intUpdateColumnsCount0;string〔〕UpdateValues;intDataRowCountmygv。Rows。Count;if(DataRowCount0){return;}stringUpdateColumnInfoTypeUpdateColumnInfo。GetType()。Name。ToLower();switch(UpdateColumnInfoType){caseint32:结果1列,参数是索引region结果1列,参数是索引intUpdateColumnIndexint(int)UpdateColumnInfo;if(FindColumnInfonull){for(inti0;iDataRowCount;i){mygv。Rows〔i〕。Cells〔UpdateColumnIndexint〕。ValueUpdateColumnValue。ToString();}}else{string〔〕FindColumnValues;boolok;stringFindColumnInfoTypeFindColumnInfo。GetType()。Name。ToLower();switch(FindColumnInfoType){caseint32:对比列1列,参数为索引intFindColumnIndex(int)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndex〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){mygv。Rows〔i〕。Cells〔UpdateColumnIndexint〕。ValueUpdateColumnValue。ToString();}}}break;caseint32〔〕:对比列多列,参数为索引int〔〕FindColumnIndexs(int〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensintFindColumnIndexs。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensint;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndexs〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){mygv。Rows〔i〕。Cells〔UpdateColumnIndexint〕。ValueUpdateColumnValue。ToString();}}break;casestring:对比列1列,参数为列名stringFindColumnName(string)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnName〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){mygv。Rows〔i〕。Cells〔UpdateColumnIndexint〕。ValueUpdateColumnValue。ToString();}}}break;casestring〔〕:对比列多列,参数为列名string〔〕FindColumnNames(string〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensstrFindColumnNames。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensstr;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnNames〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){mygv。Rows〔i〕。Cells〔UpdateColumnIndexint〕。ValueUpdateColumnValue。ToString();}}break;default:break;}}endregionbreak;caseint32〔〕:结果多列,参数是索引region结果多列,参数索引int〔〕UpdateColumnIndexsint(int〔〕)UpdateColumnInfo;UpdateValues(string〔〕)UpdateColumnValue;UpdateColumnsCountUpdateColumnIndexsint。Length;if(FindColumnInfonull){for(inti0;iDataRowCount;i){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsint〔j〕〕。ValueUpdateValues〔j〕;}}}else{string〔〕FindColumnValues;boolok;stringFindColumnInfoTypeFindColumnInfo。GetType()。Name。ToLower();switch(FindColumnInfoType){caseint32:对比列1列,参数为索引intFindColumnIndex(int)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndex〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsint〔j〕〕。ValueUpdateValues〔j〕;}}}}break;caseint32〔〕:对比列多列,参数为索引int〔〕FindColumnIndexs(int〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensintFindColumnIndexs。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensint;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndexs〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsint〔j〕〕。ValueUpdateValues〔j〕;}}}break;casestring:对比列1列,参数为列名stringFindColumnName(string)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnName〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsint〔j〕〕。ValueUpdateValues〔j〕;}}}}break;casestring〔〕:对比列多列,参数为列名string〔〕FindColumnNames(string〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensstrFindColumnNames。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensstr;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnNames〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsint〔j〕〕。ValueUpdateValues〔j〕;}}}break;default:break;}}endregionbreak;casestring:region结果1列,参数是列名stringUpdateColumnIndexstr(string)UpdateColumnInfo;if(FindColumnInfonull){for(inti0;iDataRowCount;i){mygv。Rows〔i〕。Cells〔UpdateColumnIndexstr〕。ValueUpdateColumnValue。ToString();}}else{string〔〕FindColumnValues;boolok;stringFindColumnInfoTypeFindColumnInfo。GetType()。Name。ToLower();switch(FindColumnInfoType){caseint32:对比列1列,参数为索引intFindColumnIndex(int)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndex〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){mygv。Rows〔i〕。Cells〔UpdateColumnIndexstr〕。ValueUpdateColumnValue。ToString();}}}break;caseint32〔〕:对比列多列,参数为索引int〔〕FindColumnIndexs(int〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensintFindColumnIndexs。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensint;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndexs〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){mygv。Rows〔i〕。Cells〔UpdateColumnIndexstr〕。ValueUpdateColumnValue。ToString();}}break;casestring:对比列1列,参数为列名stringFindColumnName(string)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnName〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){mygv。Rows〔i〕。Cells〔UpdateColumnIndexstr〕。ValueUpdateColumnValue。ToString();}}}break;casestring〔〕:对比列多列,参数为列名string〔〕FindColumnNames(string〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensstrFindColumnNames。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensstr;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnNames〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){mygv。Rows〔i〕。Cells〔UpdateColumnIndexstr〕。ValueUpdateColumnValue。ToString();}}break;default:break;}}endregionbreak;casestring〔〕:region结果多列,参数列名string〔〕UpdateColumnIndexsstr(string〔〕)UpdateColumnInfo;UpdateValues(string〔〕)UpdateColumnValue;UpdateColumnsCountUpdateColumnIndexsstr。Length;if(FindColumnInfonull){for(inti0;iDataRowCount;i){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsstr〔j〕〕。ValueUpdateValues〔j〕;}}}else{string〔〕FindColumnValues;boolok;stringFindColumnInfoTypeFindColumnInfo。GetType()。Name。ToLower();switch(FindColumnInfoType){caseint32:对比列1列,参数为索引intFindColumnIndex(int)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndex〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsstr〔j〕〕。ValueUpdateValues〔j〕;}}}}break;caseint32〔〕:对比列多列,参数为索引int〔〕FindColumnIndexs(int〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensintFindColumnIndexs。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensint;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnIndexs〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsstr〔j〕〕。ValueUpdateValues〔j〕;}}}break;casestring:对比列1列,参数为列名stringFindColumnName(string)FindColumnInfo;for(inti0;iDataRowCount;i){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnName〕。Value;if(valueobj!null){if(valueobj。ToString()FindColumnValue。ToString()){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsstr〔j〕〕。ValueUpdateValues〔j〕;}}}}break;casestring〔〕:对比列多列,参数为列名string〔〕FindColumnNames(string〔〕)FindColumnInfo;FindColumnValues(string〔〕)FindColumnValue;intlensstrFindColumnNames。Length;for(inti0;iDataRowCount;i){oktrue;for(intj0;jlensstr;j){objectvalueobjmygv。Rows〔i〕。Cells〔FindColumnNames〔j〕〕。Value;if(valueobj!null){if(valueobj。ToString()!FindColumnValues〔j〕){okfalse;break;}}}if(ok){for(intj0;jUpdateColumnsCount;j){mygv。Rows〔i〕。Cells〔UpdateColumnIndexsstr〔j〕〕。ValueUpdateValues〔j〕;}}}break;default:break;}}endregionbreak;default:break;}}例子中我主要是更改了被选中行的第2、3个单元格的值 目的:更新,第1、3列值为11、1text的行的第2、3列值为999,2222 代码:要查找的列索引,你也可以直接用string〔〕指定列名int〔〕indexsnewint〔〕{0,2};这些列索引中指定的值string〔〕findvaluenewstring〔〕{11,1text};要更新的列索引,同样可以用string〔〕指定列名int〔〕uindexsnewint〔〕{1,2};这些要更新的单元格的值string〔〕ufindvaluenewstring〔〕{999,2222};UpdateDatas(dataGridView1,indexs,findvalue,uindexs,ufindvalue);