Я много гуглил, чтобы найти правильный путь в 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;
}
}