初始未绑定DataSourceID,点击Button时GridView无法显示SqlDataSource数据的需求
解决ASP.NET GridView点击按钮后绑定SqlDataSource显示数据的问题
你的代码已经具备了核心的绑定逻辑,但有个关键细节导致数据无法正常显示:GridView1设置了AutoGenerateColumns="False",却没有手动添加任何绑定列,所以即便数据绑定成功,页面上也看不到内容。下面是完整的修复方案,还做了一些体验优化:
核心修复步骤
- 调整GridView的列配置:要么开启自动列生成,要么手动指定要显示的字段列
- 确保按钮点击事件与后台逻辑正确绑定(你的代码这部分已经没问题,我们可以加个小判断提升严谨性)
修正后的完整代码
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
相关产品推荐
相关产品推荐

