Therapyx
@Therapyx
Data Science

Где именно надо запускать функцию с загрузкой листа категорий из базы в DetailsView, который по дефолту visible = false?

Такая вот проблема. Есть DetailsView как "поп-ап", в котором есть dropdownlist с категориями.
Сделал следующую функцию
п.с. ddl_text это тот ддл, который в DetailsView, а ddl_Category находится на самой странице, и виден при загрузке

private void loadCategoryList()
    {
        DropDownList ddl_Text = (DropDownList)dvPurchase.FindControl("ddl_Text");
        using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_Name"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("usp_Category_Select", cn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection.Open();
            cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = Session["UserID"];
            ddl_Text.DataSource = cmd.ExecuteReader();
            ddl_Text.DataTextField = "Category";
            ddl_Text.DataValueField = "CategoryID";
            ddl_Text.DataBind();
            cmd.Connection.Close();
        }
        ddl_Category.DataSource = ddl_Text.Items;
        ddl_Category.DataBind();        
    }


Дак вот цель, это загрузить при Page_Loade ддл в DetailsView и перекинуть из него категории на главную страничку (можно и наоборот).
Пробовал открывать функцию в Page_Load, Page_Preload, но и там и там вылазит следующая ошибка. "Object reference not set to an instance of an object." на строке "ddl_Text.DataSource = cmd.ExecuteReader();"

Если же я делаю все тоже самое, только заполняю DropDownList, который на главной страничке - то все прекрасно работает, поэтому сама процедура написана без ошибок.
Возможно просто не понял некоторых нюансов, если можно подкажите также с разьяснениями :) Заранее спасибо.
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
Therapyx
@Therapyx Автор вопроса
Data Science
Эх решил, но мне кажется - очень грязным способом. Или это и есть та самая пропасть, которую не любят в асп.нет из за Вью Стэйтов :)

protected void dvPurchase_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl_Text = (DropDownList)dvPurchase.FindControl("ddl_Text");
        if (dvPurchase.CurrentMode == DetailsViewMode.Insert)
        {            
            loadCategoryList();
            Label1.Text = "Insert";         
        }
        if (dvPurchase.CurrentMode == DetailsViewMode.Edit)
        {           
            loadCategoryList();
            Label1.Text = "Edit";        
        }
        if (dvPurchase.CurrentMode == DetailsViewMode.ReadOnly)
            Label1.Text = "ReadOnly";  
        
    }
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Если вы решили свою проблему - поздравляю. Остается проблема использования WebForms. На сегодняшний день технология слишком тяжела и непрозрачна. Попробуйте научить сайт понимать одновременно WebForms и MVC и потихоньку мигрируйте туда. на MVC прозрачнее запросы и генерация разметки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы