c# - 将 sqldatareader 绑定(bind)到 gridview c#

标签 c# asp.net gridview ado.net sqldatareader

我正在为我正在学习的 asp.net 类(class)创建一个应用程序。应用程序中的一个页面需要允许用户通过姓氏或用户 ID 搜索特定学生。找到学生后,页面应显示学生数据和他/她的类(class)表。

除了类(class)表,我已经完成了所有工作。我采用的方法(正如我们在类里面学到的那样)是通过 SqlDataReader 获取查询结果并将其绑定(bind)到 GridView。这是在 showStudentSchedule() 中完成的。

当我针对我创建的数据库对其进行测试时,此函数中的查询返回正确的结果,但显示学生日程表的 GridView 未显示在页面上。

//学生信息.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="StudentInformation.aspx.cs" Inherits="StudentInformation"  %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <p>
        <asp:Label ID="Label6" runat="server" Text="Search by Last Name: "></asp:Label>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <asp:DropDownList ID="DropDownList1" runat="server" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">
        </asp:DropDownList>
    </p>

    <asp:Label ID="Label1" runat="server"></asp:Label>
    <br />
    <asp:Label ID="Label2" runat="server"></asp:Label>
    <br />
    <asp:Label ID="Label3" runat="server"></asp:Label>
    <br />
    <asp:Label ID="Label4" runat="server"></asp:Label>
    <br />
    <asp:Label ID="Label5" runat="server"></asp:Label>
    <asp:Panel ID="Panel1" runat="server">
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    </asp:Panel>
</asp:Content>

//StudentInformation.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class StudentInformation : System.Web.UI.Page
{ 

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string userStr = TextBox1.Text;
        int userInt;
        bool isNum = int.TryParse(userStr, out userInt);
        string sqlSelectFindUserByName;

        if (isNum)
            sqlSelectFindUserByName = string.Format("SELECT LastName FROM Personal_Info JOIN Students ON Personal_Info.ID = Students.Student_ID WHERE Personal_Info.ID = '{0}'", userInt);
        else
            sqlSelectFindUserByName = string.Format("SELECT LastName FROM Personal_Info JOIN Students ON Personal_Info.ID = Students.Student_ID WHERE Personal_Info.LastName LIKE '%{0}%'", userStr);

        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;


        SqlCommand commandFindUserByName = new SqlCommand(sqlSelectFindUserByName, connection);

        connection.Open();

        SqlDataReader readerFindUserByName = commandFindUserByName.ExecuteReader();

        DropDownList1.Items.Clear();
        DropDownList1.Items.Add("Please make a selection");
        while (readerFindUserByName.Read())
            DropDownList1.Items.Add(readerFindUserByName["LastName"].ToString());

        if (DropDownList1.Items.Count == 2)
            DropDownList1.SelectedIndex = 1;
        DropDownList1_SelectedIndexChanged(null, null);

        connection.Close();
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string nameLast = DropDownList1.SelectedItem.Value;
        displayStudent(nameLast);
    }

    private void displayStudent(String nameLast)
    {
        clearStudentLabel();

        int userInt;
        bool isNum = int.TryParse(nameLast, out userInt);

        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        string sqlSelectFindUserInfoByName;

        sqlSelectFindUserInfoByName = string.Format("SELECT ID, FirstName, LastName, City, Phone FROM Personal_Info WHERE LastName LIKE '%{0}%'", nameLast);

        SqlCommand commandFindUserInfo = new SqlCommand(sqlSelectFindUserInfoByName, connection);
        connection.Open();
        SqlDataReader readerFindUserInfo = commandFindUserInfo.ExecuteReader();
        int i = 0;
        while (readerFindUserInfo.Read())
        {
            Label1.Text = "Student ID: " + readerFindUserInfo["ID"].ToString();
            Label2.Text = "First name: " + readerFindUserInfo["FirstName"].ToString();
            Label3.Text = "Last name: " + readerFindUserInfo["LastName"].ToString();
            Label4.Text = "City: " + readerFindUserInfo["City"].ToString();
            Label5.Text = "Phone: " + readerFindUserInfo["Phone"].ToString();
        }
        connection.Close();


       showStudentSchedule(userInt);

    }

    private void showStudentSchedule(int id)
    {
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        string sqlSelectFindUserInfoByName = string.Format("SELECT Class_Schedule.Section_ID, Class_Schedule.Course_ID, Class_Schedule.Days, Class_Schedule.Time, CASE WHEN Personal_Info.FirstName IS NULL THEN 'Staff' ELSE (Personal_Info.LastName + Personal_Info.FirstName) END AS Name FROM Class_Schedule JOIN Student_Enrollment ON Class_Schedule.Section_ID = Student_Enrollment.Section_ID JOIN Personal_Info ON Class_Schedule.Instructor_ID = Personal_Info.ID WHERE Student_Enrollment.Student_ID = {0}", id);
        SqlCommand commandFindUserInfo = new SqlCommand(sqlSelectFindUserInfoByName, connection);
        connection.Open();
        SqlDataReader readerFindUserInfo = commandFindUserInfo.ExecuteReader();
        GridView1.DataSource = readerFindUserInfo;
        GridView1.DataBind(); 
        /*
        string connectionString = "Data Source=LocalHost;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa_0001";

     string commandString = "Select * from Customers";

     SqlConnection conn = new SqlConnection(connectionString);

     SqlCommand command = new SqlCommand(commandString);

     conn.Open();
     command.Connection = conn;
     SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
     GridView1.DataSource = reader;
     GridView1.DataBind(); 
         */
    }

    private void clearStudentLabel()
    {
        Label1.Text = "";
        Label2.Text = "";
        Label3.Text = "";
        Label4.Text = "";
        Label5.Text = "";
    }
}

最佳答案

试试这个:

 SqlConnection connection = new SqlConnection();
 connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
 SqlCommand command = new SqlCommand(sqlSelectFindUserByName);

 connection.Open();
 command.Connection = connection;
 SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
 GridView1.DataSource = reader;
 GridView1.DataBind();

关于c# - 将 sqldatareader 绑定(bind)到 gridview c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381490/

相关文章:

c# - EF 自定义结果集映射

c# - EF 迁移中的自定义代码执行

java - 使用 Universal Image Loader 加载联系人的 PHOTO_URI

android - gridview点击效果

c# - 属性描述符如何使用相同的代码行获取两个控件的值?

c# - 如何针对机器存储验证 SignedXml 中的证书

c# - 删除表中的特定条目

asp.net - 如何在 Blazor WASM 中实现预渲染

asp.net - 在 ASP.NET 中修改服务器端的 html 输出

c# - 如何将内存流下载到文件?