从数据库获取JSON字符串绑定GridView行文本框遇空值问题
问题分析与修正方案
代码中的关键错误
- 控件查找错误:遍历
gv.Rows时,错误用e.Row.FindControl获取txtKey,应使用当前循环的row对象,否则会找不到目标控件,导致文本框无法赋值。 - 语法错误:
txtValue的查找语句多了一个左括号,编译不通过,直接导致代码执行失败。 - 逻辑冗余与错误:
- 循环内重复反序列化数据库JSON,完全没必要,应在循环外仅执行一次反序列化。
- 错误将页面刷新后初始为空的文本框值添加到配置列表,既无效还可能干扰原有数据。
- 赋值时用
LocalConfigurations.Key/LocalConfigurations.Value,与当前行的Key不匹配;且未处理SingleOrDefault返回null的情况,会引发空引用异常。
修正后的代码
// 一次性反序列化数据库配置,避免循环内重复操作 string jsonDeserialize = dtTerminalLocalConfig.Rows[0]["Settings"].ToString(); List<KeyValuePair<string, string>> configurations = JsonConvert.DeserializeObject<List<KeyValuePair<string, string>>>(jsonDeserialize); // 遍历GridView每一行 foreach (GridViewRow row in gv.Rows) { // 用当前row正确查找控件 TextBox txtKey = (TextBox)row.FindControl("txtKey"); TextBox txtValue = (TextBox)row.FindControl("txtValue"); if (txtKey != null && txtValue != null) { // 根据当前行的Key匹配配置项 var configItem = configurations.SingleOrDefault(kv => kv.Key == txtKey.Text); // 找到则赋值,避免空引用 if (configItem != null) { txtValue.Text = configItem.Value; } } }
额外说明
- 确保
txtKey的Text值是预先绑定好的(比如通过GridView数据源赋值),这样才能正确匹配配置列表中的Key。 - 如果
txtKey允许用户编辑,需保证保存时是用用户输入的Key和Value组成键值对存入数据库,否则刷新后无法正确匹配。
内容的提问来源于stack exchange,提问作者Freshernoob
相关产品推荐
相关产品推荐

