Я привязываю выпадающий список к базе данных SQL2008 в моем WebUserControl, но мой подход мог бы потребовать некоторого улучшения

#asp.net #ado.net

#asp.net #ado.net

Вопрос:

Я делаю лабораторную работу. Я изо всех сил пытаюсь привязать выпадающий список к базе данных SQL2008 в моем WebUserControl. Реализовать его было проще простого, когда весь мой передний и задний код находился в webusercontrol, но после этого мне сказали, что такой способ реализации совершенно непрофессиональен. Кроме того, мне сказали, что мне нужно создать средний класс с частными переменными и общедоступными свойствами:

 public class UsersIntoDLL
{
    public UsersIntoDLL(int userID, string userName, string userFamilyName)
    {
        userID = UserID;
        userName = UserName;
        userFamilyName = UserFamilyName;
    }

    public int UserID
    { get; set; }

    public string UserName
    { get; set; }

    public string UserFamilyName
    { get; set; }
}
  

Хранимая процедура:

 create procedure [dbo].[GetStudentsToDDL]
as
select UserID, UserName,UserFamilyName
from dbo.Users
  

Новый метод:

 public List<UsersIntoDLL> GetStudents()
{
    SqlConnection conn = new SqlConnection(Config.DbConnectionString);
    SqlCommand cmd = new SqlCommand("GetStudentsToDDL", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    List<UsersIntoDLL> udll = new List<UsersIntoDLL>();
    try
    {
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {   
            //ListItem lst = new ListItem();
            //udll.Text = reader["StudentName"].ToString()   " "   reader["StudentFamilyname"].ToString();
            UsersIntoDLL students = new UsersIntoDLL((int)reader["UserID"], (string)reader["UserName"],(string)reader["UserFamilyName"]);
            udll.Add(students);
        }
        reader.Close();

    }
    catch (Exception ex)
    {
        // here should be some reference to label located in webusercontrol. don't know
        // how to do it
        Label err = new Label();
        err.Text = ex.Message;
    }
    finally
    {
        conn.Close();
    }

    return udll;

}
  

Плохая привязка в обратном коде webusercontrol:

 CatalogAccess ca = new CatalogAccess();
    ddlStudents.DataSource = ca.GetStudents();
    ddlStudents.DataTextField = "UserName";
    ddlStudents.DataValueField = "UserID";
    ddlStudents.DataBind();
  

Я не получаю ошибок и не привязываю. Учащиеся не отображаются в моем выпадающем списке. Пожалуйста, помогите!!!

Комментарии:

1. можете ли вы показать нам строку в .aspx, где объявлен ddlStudents?

2. <asp: идентификатор выпадающего списка=»ddlStudents» CssClass=»TextBox» runat = «server» />

Ответ №1:

Ах, вы неправильно устанавливали переменные в своем классе.

Используйте это вместо:

 public class UsersIntoDLL {


public UsersIntoDLL(int userID, string userName, string userFamilyName) 
{ 
    UserID = userID; 
    UserName = userName; 
    UserFamilyName = userFamilyName; 
} 

public int UserID 
{ 
    get; 
    set; 
} 
public string UserName 
{ 
    get; 
    set; 
} 
public string UserFamilyName 
{ 
    get; 
    set; 
}
  

}

Комментарии:

1. С удовольствием. Вы можете поблагодарить меня, нажав стрелку вверх рядом с 0 в моем ответе. Также должна быть ссылка с надписью «принять этот ответ» или что-то подобное. Это увеличивает мою репутацию, если вы это сделаете 🙂

Ответ №2:

Сразу ничего не выскакивает, но вы думали об использовании ObjectDataSource (linky)

p.s. Вы проверили, что список не пуст?

Комментарии:

1. Черт, нет изображений, нет ответов для новых пользователей… Похоже на ddlStudents. DataSource null object как это может произойти и по какой причине?

2. Если источник данных равен null, то причиной этого является не чтение вашей базы данных. Я бы сказал, что вы не настраиваете свой источник данных. Строка: ddlStudents.DataSource = ca.GetStudents(); это внутри if инструкции? Или внутри метода, который не вызывается? Вы установили для него точку останова, чтобы увидеть, попадает ли она?

3. Кроме того, что вы имели в виду, говоря «Черт возьми, нет изображений, нет ответов для новых пользователей»?

4. Я попытался загрузить скриншот, но система защищает, говоря: «Вы новичок, и вам не разрешено загружать изображения»

5. внутри метода Page_Load WebUserControl

Ответ №3:

Предполагая, что вы запускаете это в Visual Studio, не могли бы вы установить точку останова в ddlStudents.DataSource = ca.GetStudents() строке и убедиться, что она не пуста?

Чтобы исключить другие потенциальные проблемы, временно измените эту строку на:

 ddlStudents.DataSource = new { UserName = "Test", UserID = "1" };
  

и посмотрите, отображается ли хотя бы один элемент в раскрывающемся списке.

Комментарии:

1. Пытался сделать это так, как вы говорите. Источник данных является недопустимым типом. Это должен быть либо IListSource, либо IEnumerable, либо IDataSource.