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

点击按钮绑定GridView回传后显示空行问题求助

问题分析与解决方案

核心问题根源

回传时GridView显示空行的本质原因是:动态列调整仅在首次加载执行,回传时GridView控件树恢复到原始列结构,与当前绑定的DataTable列不匹配,导致Eval绑定失败。此外,类级变量returnTable的复用逻辑也可能引发列重复或结构不一致问题。


具体修复步骤

1. 每次页面加载都同步列结构

ASP.NET回传时会重建控件树,之前动态移除的列会自动恢复。因此必须在**每次页面加载(含回传)**时执行列调整,确保列结构与当前accessType匹配:

protected void Page_Load(object sender, EventArgs e)
{
    // 无论是否回传,都执行列调整
    AccessControlGridColumnAdjustment();
    if (!IsPostBack)
    {
        AccessControlGrid.Visible = false;
    }
}

2. 避免DataTable复用引发的列冲突

每次点击按钮时创建全新的DataTable,避免旧列结构干扰:

protected void ImgBtnGo_Click(object sender, EventArgs e)
{
    // 每次请求都创建新的DataTable,彻底避免列重复问题
    DataTable returnTable = new DataTable("AccessControl");
    
    CreateAccessControlDataTable(ref returnTable, hdnAccessType.Value);
    LoadData();
    PopulateDataTable(ref returnTable, accessControlResultSet, hdnAccessType.Value);
    
    AccessControlGrid.DataSource = returnTable;
    AccessControlGrid.DataBind();
    AccessControlGrid.Visible = true;
}

3. 确保列调整逻辑准确匹配accessType

完善AccessControlGridColumnAdjustment方法,根据当前accessType精准移除不必要的列,示例逻辑如下:

private void AccessControlGridColumnAdjustment()
{
    string accessType = hdnAccessType.Value;
    
    // 倒序遍历列集合,避免索引偏移
    for (int i = AccessControlGrid.Columns.Count - 1; i >= 0; i--)
    {
        TemplateField col = AccessControlGrid.Columns[i] as TemplateField;
        if (col == null) continue;
        
        string headerText = col.HeaderText;
        switch (accessType)
        {
            case "IPF":
                // 仅保留用户信息和IPF专属列
                if (!headerText.Equals("User No") && !headerText.Equals("User Name") 
                    && !headerText.Equals("Submit In Prep Filing Deletion"))
                {
                    AccessControlGrid.Columns.RemoveAt(i);
                }
                break;
            case "FLD":
                // 仅保留用户信息和Flood相关列
                if (!headerText.Equals("User No") && !headerText.Equals("User Name") 
                    && !headerText.Contains("Flood"))
                {
                    AccessControlGrid.Columns.RemoveAt(i);
                }
                break;
            // FS类型保留所有默认列,无需额外处理
        }
    }
}

4. 验证数据绑定有效性

在绑定前添加调试代码,确认DataTable的行数和字段值是否正确:

// 调试用:检查DataTable数据是否正常
foreach (DataRow row in returnTable.Rows)
{
    Debug.WriteLine($"UserNo: {row["UserNo"]}, UserName: {row["UserName"]}");
}

内容的提问来源于stack exchange,提问作者LogicalDesk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:19:52