#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.