ASP.NET 新手 - 无法从 SQL 数据库更新 DataGrid

Posted

技术标签:

【中文标题】ASP.NET 新手 - 无法从 SQL 数据库更新 DataGrid【英文标题】:ASP.NET Newbie - can't update DataGrid from SQL database 【发布时间】:2013-07-25 15:02:56 【问题描述】:

我是 ASP.NET 的新手,我正在尝试构建一个简单的 Web 应用程序,该应用程序允许用户根据他们从 ListBox 和 Dropdown 中的选择来查看(现在只是)来自 SQL 数据库的数据。这个想法是,在做出选择后单击按钮将返回基于存储过程的数据库结果,该过程将列表和下拉选择作为参数传递。我想我已经很接近了,但我似乎无法将结果返回到为此目的指定的 DataGrid 中。我正在运行的 C# 代码如下。非常感谢任何帮助!!!

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.htmlControls;
using System.Xml.Linq;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Timeline_Analytics_App_Test

    public partial class Default : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        

        

        protected void Button1_Click(object sender, EventArgs e)
        
            string Host = ListBox1.SelectedValue;
            string Test = DropDownList1.SelectedValue;
            this.SqlDataSource3.SelectCommand = "EXEC dbo.TEST_RESULT_DETAIL '" + Host + "', " + Test;
            //MessageBox.Show(this.SqlDataSource3.SelectCommand);
            //this.GridView1.DataBind();

            String queryString = SqlDataSource3.SelectCommand;

            MessageBox.Show(queryString);

            DataSet ds = GetData(queryString);

            if (ds.Tables.Count > 0)
            
                //MessageBox.Show("1");
                GridView1.DataSource = ds;
                //MessageBox.Show("2");
                GridView1.DataBind();
                //MessageBox.Show("3");
            
            else
            
                MessageBox.Show("Unable to connect to the database.");
            

        

        DataSet GetData(String queryString)
        

            // Retrieve the connection string stored in the Web.config file.
            String connectionString = ConfigurationManager.ConnectionStrings["Timeline_AnalyticsConnectionString3"].ConnectionString;

            DataSet ds = new DataSet();

            try
            
                // Connect to the database and run the query.
                SqlConnection connection = new SqlConnection(connectionString);
                SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

                // Fill the DataSet.
                adapter.Fill(ds);
            
            catch (Exception ex)
            
                // The connection failed. Display an error message.
                MessageBox.Show("Unable to connect to the database.");
            

            return ds;
        
    

插件:

我的默认.aspx:

<%@ Page Language="C#" MasterPageFile="~/TATRRT.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Timeline_Analytics_App_Test.Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>

    <%--Host List Box--%>
    <div>
        <h4 style="font-family:verdana; font-size:10pt; position:absolute;left:10px;top:140px">Please select the host you want to review</h4>
        <asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" style="font-family:verdana; font-size:10pt; position:absolute;left:10px;top:180px"
            DataTextField="Host" DataValueField="Host" Height="150" Width="320"></asp:ListBox>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Timeline_Analytics_App_TestConnectionString %>"
            SelectCommand="SELECT DISTINCT Host FROM Test_Summary WHERE Category IS NULL AND Responsive = 1">
        </asp:SqlDataSource>
        <br></br>
    </div>

   <%--Test Dropdown--%>
    <div>
        <h4 style="font-family:verdana; font-size:10pt; position:absolute;left:350px;top:140px">Please select the test you want to review</h4>
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" style="font-family:verdana; font-size:10pt; position:absolute;left:350px;top:180px"
            DataTextField="Test_Name" DataValueField="Test_Name" Width="320">
        </asp:DropDownList>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Timeline_Analytics_App_TestConnectionString2 %>"
            SelectCommand="SELECT DISTINCT CAST(RIGHT(REVERSE(RIGHT(REVERSE(Test_Name), 8)), 2) AS INT) AS Test_Name FROM Test_Summary ORDER BY CAST(RIGHT(REVERSE(RIGHT(REVERSE(Test_Name), 8)), 2) AS INT)"> 
        </asp:SqlDataSource>

    <%--Test Result Summary--%>
    <asp:GridView ID="GridView1" runat="server" 
            style="font-family:verdana; font-size:10pt; position:absolute;left:10px;top:350px" AllowPaging="True" 
            AutoGenerateColumns="False">
            <%--DataSourceID="SqlDataSource3"--%>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
        ConnectionString="<%$ ConnectionStrings:Timeline_AnalyticsConnectionString3 %>" 
        SelectCommand="">
    </asp:SqlDataSource>
    </div>
    <asp:Button ID="Button1" runat="server" Text="Retrieve results" 
        style="font-family:verdana; font-size:10pt; position:absolute;left:680px;top:180px" 
        onclick="Button1_Click"/>

</ContentTemplate>
</asp:UpdatePanel>

</asp:Content>

【问题讨论】:

您的 GridView 在标记中的定义在哪里?另外,从数据库中返回的数据是否正确;换句话说,DataSet 是否被填充或发生任何错误? 您是否收到任何错误消息? 在此代码迭代中没有引发任何错误 - if - else 条件中的消息打印没有问题。我使用与我用于测试应用程序的参数完全相同的参数测试了存储过程,它确实返回了结果。 【参考方案1】:

您的问题是AutoGenerateColumns="False" 并且您没有在标记中定义Columns,因此当GridView 数据绑定时,它没有任何可绑定的对象。

最简单的解决方法是将AutoGenerateColumns 设置为True,如下所示:

AutoGenerateColumns="True"

注意:这将使您的列名与数据库字段相同,这可能是也可能不是您想要的。

要更好地控制GridView 列,请查看GridView Column Property MSDN Documentation

【讨论】:

卡尔 - 非常感谢!这似乎已经成功了,我的网格现在正在填充!此外,这是我在 Stack Overflow 上的第一篇文章(尽管我过去曾用它作为参考),我想感谢所有对我的问题感兴趣的人——虽然我知道情况并非总是如此,但我做得很好感谢解决这个问题的速度!再次感谢!!! 没问题,祝你的 GridView 代码好运。如果您觉得此答案对您有所帮助,请随时接受。

以上是关于ASP.NET 新手 - 无法从 SQL 数据库更新 DataGrid的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 从 SQL 切换到 Access DB 后,我无法让我的数据源/gridview 正常工作

在我的 ASP.Net 项目中无法从 VS2019 连接到 SQL Server 数据库

无法从 ASP.NET Web 应用程序连接到我的 SQL Server Express

ASP.net Visual Web Developer - 使用 SQL 连接 Access 数据库

ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器

ASP.NET MVC 4 EF6 无法连接到 SQL Server Express 数据库