Отображаемые данные gridview не соответствуют выбору, выбранному из выпадающего списка
Я очень новичок в C#. Я пытаюсь создать веб-приложение, которое позволит пользователям видеть классы, основанные на предмете, который они выбирают из выпадающего списка. У меня есть выпадающий список, отображающий предметы из выпадающего списка. Код, который у меня есть, не показывает пользователю информацию, которую он выбрал из выпадающего списка. Он показывает одни и те же данные gridview, независимо от того, какой вариант выбран.
Что я уже пробовал:
Это код, который покажет веб-приложение.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Summer.aspx.cs" Inherits="Summer" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Summer 2016</title> </head> <body> <form id="form1" runat="server"> <div> <h1>Summer 2016</h1> <h2>Classes offered</h2> <h3>Please Choose a Subject</h3> </div> <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="Subjects" DataValueField="Subjects"> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:RegistrationConnectionString %>" SelectCommand="SELECT [Subjects], [Id] FROM [Subjects]"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource2"> <columns> <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" /> <asp:BoundField DataField="Instrutor" HeaderText="Instrutor" SortExpression="Instrutor" /> <asp:BoundField DataField="CRN" HeaderText="CRN" SortExpression="CRN" /> <asp:BoundField DataField="Credits" HeaderText="Credits" SortExpression="Credits" /> <asp:BoundField DataField="Day" HeaderText="Day" SortExpression="Day" /> <asp:BoundField DataField="Time" HeaderText="Time" SortExpression="Time" /> <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> <asp:BoundField DataField="Section" HeaderText="Section" SortExpression="Section" /> <asp:BoundField DataField="Location" HeaderText="Location" SortExpression="Location" /> <asp:BoundField DataField="BeginEnd" HeaderText="BeginEnd" SortExpression="BeginEnd" /> <asp:BoundField DataField="Number" HeaderText="Number" SortExpression="Number" /> <asp:BoundField DataField="SubjectId_Fk" HeaderText="SubjectId_Fk" SortExpression="SubjectId_Fk" /> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:RegistrationConnectionString %>" SelectCommand="SELECT [Id], [Instrutor], [CRN], [Credits], [Day], [Time], [Title], [Section], [Location], [BeginEnd], [Number], [SubjectId_Fk] FROM [Classes]"> <br> </form> </body> </html>
Это код, лежащий в основе приложения.
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; using System.Data; using System.Configuration; public partial class Summer : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // DropDownList1.DataSource = GetDataTable(); DropDownList1.DataValueField = "Id"; DropDownList1.DataTextField = "Subjects"; DropDownList1.DataBind(); } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { using (SqlConnection Cn = new SqlConnection(ConfigurationManager.ConnectionStrings[@"C:\Users\Keith\Documents\Registration.mdf"].ConnectionString)) { using (SqlCommand Cmd = new SqlCommand("select * from Classes where Id=" + DropDownList1.SelectedValue.ToString(), Cn)) { Cn.Open(); Cmd.Parameters.AddWithValue("@Id", int.Parse(DropDownList1.SelectedValue)); SqlDataReader Dr = Cmd.ExecuteReader(); if (Dr.HasRows) { GridView1.DataSource = Dr; GridView1.DataBind(); } Dr.Close(); Cn.Close(); } } } public static DataTable GetDataTable(string sqlCommand) { DataTable table = new DataTable(); try { using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[@"C:\Users\Keith\Documents\Registration.mdf"].ConnectionString)) { using (SqlCommand cmd = new SqlCommand(sqlCommand, myConnection)) { using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { adapter.Fill(table); } } } } catch (Exception ex) { table = null; throw ex; } return table; } }
Er. Puneet Goel
Так в чем же, собственно, ваша проблема ? Ошибка нулевой ссылки или как привязать представление сетки к выпадающему списку изменения выбранного значения ?
Member 12863707
Я бы сказал, что обе эти проблемы - моя проблема, но я думаю, что если ошибка NullReferenceException исчезнет с изменением кода.
haisol
Обычно я использовал sql-команду query type хранимых процедур и добавлял к ней параметры (а не тип запроса текста). Я бы изменил ваш запрос на хранимую процедуру, установил тип команды на процедуру и использовал cmd.Parameters.AddWithValue. Еще одним более быстрым вариантом было бы изменить ваш запрос на следующий: select * from ODetails where orderID= " + DropDownList1.SelectedValue.ToString () (псевдокод).
Member 12863707
Я обновил код с вашим предложением. Я получаю исключение NullReferenceException на моих вторых связях.
Er. Puneet Goel
вы имеете в виду в GetDataTable?