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

初始未绑定DataSourceID,点击Button时GridView无法显示SqlDataSource数据的需求

解决ASP.NET GridView点击按钮后绑定SqlDataSource显示数据的问题

你的代码已经具备了核心的绑定逻辑,但有个关键细节导致数据无法正常显示:GridView1设置了AutoGenerateColumns="False",却没有手动添加任何绑定列,所以即便数据绑定成功,页面上也看不到内容。下面是完整的修复方案,还做了一些体验优化:

核心修复步骤

  1. 调整GridView的列配置:要么开启自动列生成,要么手动指定要显示的字段列
  2. 确保按钮点击事件与后台逻辑正确绑定(你的代码这部分已经没问题,我们可以加个小判断提升严谨性)

修正后的完整代码

ASPX页面代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>机器数据查看器</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click1" Text="加载机器数据" />
        <hr />
        <!-- 开启自动生成列,让GridView根据查询结果自动创建列 -->
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" 
            CellPadding="4" ForeColor="#333333" GridLines="None" Width="100%">
            <AlternatingRowStyle BackColor="#F5F5F5" />
            <HeaderStyle BackColor="#4CAF50" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#FFFFFF" />
            <SelectedRowStyle BackColor="#FFC107" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
            SelectCommand="SELECT * FROM [Machine]"></asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

后台C#代码(aspx.cs)

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 页面初始加载时不绑定数据,保持GridView为空状态
    }

    protected void Button1_Click1(object sender, EventArgs e)
    {
        // 确保数据源有效后再执行绑定
        if (SqlDataSource1 != null)
        {
            GridView1.DataSource = SqlDataSource1;
            GridView1.DataBind();
        }
    }
}

额外说明

如果你需要自定义显示的列(比如只展示特定字段、修改列标题),可以把AutoGenerateColumns改回False,然后手动添加绑定列,示例如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="100%">
    <Columns>
        <asp:BoundField DataField="MachineID" HeaderText="机器ID" />
        <asp:BoundField DataField="MachineName" HeaderText="机器名称" />
        <asp:BoundField DataField="CreateTime" HeaderText="创建时间" DataFormatString="{0:yyyy-MM-dd}" />
        <!-- 可根据表结构添加更多字段列 -->
    </Columns>
    <!-- 样式配置和之前一致 -->
</asp:GridView>

最后请确认你的Web.config中ConnectionString配置正确,能够正常连接到目标数据库,这样点击按钮后就能成功加载并显示Machine表的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:42:44