You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从数据库获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:00:53