Каков наилучший подход для вставки с помощью sqldatasource из кода сзади с использованием подробного просмотра и раскрывающегося списка - PullRequest
0 голосов
/ 30 августа 2018

Я много гуглил, чтобы найти правильный путь в Visual Studio 2017 и C # .net вручную вставлять выбранное значение из 4 выпадающих списков, которые вложены в подробное представление с sqldatasource, потому что мне нужно вставить значения, а не текст. Все остальные строки в DetailsView являются текстовыми полями и вставляются правильно, когда ItemCommand == Вставить (нажата кнопка Вставить ссылку).

Я прочитал Скотта Митчелла " Доступ и обновление данных в asp.net: вставка данных " и "Работа с данными в asp.net 2.0 :: Вставка, обновление и удаление данных с помощью SqlDataSource ", но он не описывает, как написать синтаксис кода для передачи значения в InsertParameter для моей ситуации.

Один поток показал мне, что я могу использовать событие ItemCommand () для вставки значений. Мое событие ItemCommand использует пример кода из него. Этот поток показал, что предыдущая ссылка может быть избыточной, и я могу напрямую вызывать SqlDataSource.

Исходя из моих исследований, я предложил несколько способов успешного добавления в событие ItemCommand () и событие ItemInserting (). Мне интересно, какой метод лучше всего использовать? Это предпочтение разработчика или есть веская причина, чтобы идти тем или иным путем? Вот код для обоих подходов, которые работают:

ItemCommand CODE:

protected void DetailsView1_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {  
        if (e.CommandName == "Cancel")
        {
            ////clear all fields and return to page1?
            //Response.Redirect("Page1.aspx"); 
        }

        if (e.CommandName == "Insert")
        {
            // Manually insert dropdownlist Values selected by user
            DropDownList ddlIns = (DropDownList)DetailsView1.FindControl("ddlInss");
            DropDownList ddlDev = (DropDownList)DetailsView1.FindControl("ddlDevs");
            DropDownList ddlTec = (DropDownList)DetailsView1.FindControl("ddlTecs");
            DropDownList ddlStat = (DropDownList)DetailsView1.FindControl("ddlStats"); 

            DetailsView d = (DetailsView)sender;
            d.ChangeMode(DetailsViewMode.Insert);
            SqlDataSource o = (SqlDataSource)d.NamingContainer.FindControl("SqlDataSource1");
            o.InsertParameters["Tech"].DefaultValue = ddlTec.SelectedValue; // e.CommandArgument.ToString();
            o.InsertParameters["Insp"].DefaultValue = ddlIns.SelectedValue; // e.CommandArgument.ToString();
            o.InsertParameters["Dev"].DefaultValue = ddlDev.SelectedValue; // e.CommandArgument.ToString();
            o.InsertParameters["Status"].DefaultValue = ddlStat.SelectedValue; // e.CommandArgument.ToString();
        }
    }

Вставка кода:

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    { 

        if (DetailsView1.CurrentMode == DetailsViewMode.Insert && DetailsView1.Rows.Count > 0)
        {  
            //Used for debugging: Use e.Values property to access the values entered by the user.
            ArrayList emptyFieldList = ValidateFields((OrderedDictionary)e.Values);

            //Find dropdownlists to manually insert user selections  
            DropDownList ddlIns = (DropDownList)DetailsView1.FindControl("ddlInss");
            DropDownList ddlDev = (DropDownList)DetailsView1.FindControl("ddlDevs");
            DropDownList ddlTec = (DropDownList)DetailsView1.FindControl("ddlTecs");
            DropDownList ddlStat = (DropDownList)DetailsView1.FindControl("ddlStats"); 

            SqlDataSource1.InsertParameters["Tech"].DefaultValue = ddlTec.SelectedValue;  
            SqlDataSource1.InsertParameters["Insp"].DefaultValue = ddlIns.SelectedValue;  
            SqlDataSource1.InsertParameters["Dev"].DefaultValue = ddlDev.SelectedValue;  
            SqlDataSource1.InsertParameters["Status"].DefaultValue = ddlStat.SelectedValue; 
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...